Skip to content

Commit 5bbfe98

Browse files
tszumskiSakoram
andauthored
Fix: handling case where RL is lower then expected (#1205)
1. Fix handling case where RL is lower then expected 2. Update ice driver to version 2.2.8 --------- Signed-off-by: Szumski, Tomasz<[email protected]> Co-authored-by: Kasiewicz, Marek <[email protected]>
1 parent fc4c95a commit 5bbfe98

18 files changed

+228
-74
lines changed

doc/e810.md

Lines changed: 16 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -8,41 +8,41 @@ The Media Transport Library relies on certain rate limit patches that are curren
88

99
> **Note:** Occasionally, after a system reboot, the operating system (Ubuntu) may automatically upgrade to a new kernel version. In such cases, it is important to remember to rebuild the driver to ensure compatibility with the new kernel version.
1010
11-
### 1.1. Download Driver Version 1.16.3
11+
### 1.1. Download Driver Version 2.2.8
1212

13-
You can download the CVL 1.16.3 driver source code directly with the command:
13+
You can download the CVL 2.2.8 driver source code directly with the command:
1414

1515
```bash
16-
wget https://downloadmirror.intel.com/843928/ice-1.16.3.tar.gz
16+
wget https://downloadmirror.intel.com/859252/ice-2.2.8.tar.gz
1717
```
1818

19-
(As an alternative, you can also visit <https://www.intel.com/content/www/us/en/download/19630/intel-network-adapter-driver-for-e810-series-devices-under-linux.html> and select `Download ice-1.16.3.tar.gz`.
19+
(As an alternative, you can also visit <https://www.intel.com/content/www/us/en/download/19630/intel-network-adapter-driver-for-e810-series-devices-under-linux.html> and select `Download ice-2.2.8.tar.gz`.
2020

21-
Make sure to select the 1.16.3 version from the available version options, as there may be newer versions available. It is important to note that version 1.16.3 is the latest version we have verified. Typically, we revisit driver version upgrades on a quarterly schedule.)
21+
Make sure to select the 2.2.8 version from the available version options, as there may be newer versions available. It is important to note that version 2.2.8 is the latest version we have verified. Typically, we revisit driver version upgrades on a quarterly schedule.)
2222

23-
The steps are based on downloading the file `ice-1.16.3.tar.gz`.
23+
The steps are based on downloading the file `ice-2.2.8.tar.gz`.
2424

25-
### 1.2. Unzip 1.16.3 Driver and Enter into the Source Code Directory
25+
### 1.2. Unzip 2.2.8 Driver and Enter into the Source Code Directory
2626

2727
```bash
28-
tar xvzf ice-1.16.3.tar.gz
29-
cd ice-1.16.3
28+
tar xvzf ice-2.2.8.tar.gz
29+
cd ice-2.2.8
3030
```
3131

32-
### 1.3. Patch 1.16.3 Driver with Rate Limit Patches
32+
### 1.3. Patch 2.2.8 Driver with Rate Limit Patches
3333

34-
Apply all the patches placed in [directory for ice_driver](../patches/ice_drv/1.16.3/).
34+
Apply all the patches placed in [directory for ice_driver](../patches/ice_drv/2.2.8/).
3535

3636
```bash
3737
git init
3838
git add .
39-
git commit -m "init version 1.16.3"
40-
git am $mtl_source_code/patches/ice_drv/1.16.3/*.patch
39+
git commit -m "init version 2.2.8"
40+
git am $mtl_source_code/patches/ice_drv/2.2.8/*.patch
4141
```
4242

4343
Note: The variable `$mtl_source_code` should be set to the top directory of the Media Transport Library source code. Please ensure that it is correctly configured. Additionally, when running the `git am` command, please verify that it executes without any errors.
4444

45-
Use `git log` to check if the latest commit is `version: update to Kahawai_1.16.3_20250327`.
45+
Use `git log` to check if the latest commit is `version: update to Kahawai_2.2.8`.
4646

4747
### 1.4. Build and Install the Driver
4848

@@ -85,7 +85,7 @@ sudo dmesg | grep "Intel(R) Ethernet Connection E800 Series Linux Driver"
8585
```
8686

8787
```text
88-
ice: Intel(R) Ethernet Connection E800 Series Linux Driver - version Kahawai_1.16.3_20250327
88+
ice: Intel(R) Ethernet Connection E800 Series Linux Driver - version Kahawai_2.2.8
8989
```
9090

9191
Similar steps to confirm the DDP version.
@@ -150,7 +150,7 @@ A correct setup should have an output similar to the following:
150150

151151
```text
152152
driver: ice
153-
version: Kahawai_1.16.3_20250327
153+
version: Kahawai_2.2.8
154154
firmware-version: 4.40 0x8001c967 1.3534.0
155155
expansion-rom-version:
156156
bus-info: 0000:af:00.0

include/st20_api.h

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -62,9 +62,11 @@ extern "C" {
6262
#define ST20_TX_FLAG_ENABLE_VSYNC (MTL_BIT32(5))
6363
/**
6464
* Flag bit in flags of struct st20_tx_ops.
65-
* If disable the static RL pad interval profiling.
65+
* If enable the static RL pad interval profiling.
66+
* Static padding is trained only for e810, it is not recommended to use this flag
67+
* for other NICs.
6668
*/
67-
#define ST20_TX_FLAG_DISABLE_STATIC_PAD_P (MTL_BIT32(6))
69+
#define ST20_TX_FLAG_ENABLE_STATIC_PAD_P (MTL_BIT32(6))
6870
/**
6971
* Flag bit in flags of struct st20_tx_ops.
7072
* If enable the rtcp.

include/st_pipeline_api.h

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -446,9 +446,11 @@ enum st20p_tx_flag {
446446
*/
447447
ST20P_TX_FLAG_ENABLE_VSYNC = (MTL_BIT32(5)),
448448
/**
449-
* If disable the static RL pad interval profiling.
449+
* If enable the static RL pad interval profiling.
450+
* Static padding is trained only for e810, it is not recommended to use this flag
451+
* for other NICs.
450452
*/
451-
ST20P_TX_FLAG_DISABLE_STATIC_PAD_P = (MTL_BIT32(6)),
453+
ST20P_TX_FLAG_ENABLE_STATIC_PAD_P = (MTL_BIT32(6)),
452454
/**
453455
* If enable the rtcp.
454456
*/

lib/src/mt_main.h

Lines changed: 3 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,7 @@
4848
#define MT_MAX_SCH_NUM (18) /* max 18 scheduler lcore */
4949

5050
/* max RL items */
51-
#define MT_MAX_RL_ITEMS (64)
51+
#define MT_MAX_RL_ITEMS (128)
5252

5353
#define MT_ARP_ENTRY_MAX (60)
5454

@@ -616,13 +616,9 @@ struct mt_sch_mgr {
616616
enum mt_lcore_type local_lcores_type[RTE_MAX_LCORE];
617617
};
618618

619-
struct mt_audio_pacing_train_result {
620-
uint64_t input_bps; /* input, byte per sec */
621-
uint64_t profiled_bps; /* profiled result */
622-
};
623-
624619
struct mt_pacing_train_result {
625-
uint64_t rl_bps; /* input, byte per sec */
620+
uint64_t input_bps; /* input, byte per sec */
621+
uint64_t profiled_bps; /* profiled result */
626622
float pacing_pad_interval; /* result */
627623
};
628624

@@ -742,8 +738,6 @@ struct mt_interface {
742738
bool tx_rl_root_active;
743739
/* video rl pacing train result */
744740
struct mt_pacing_train_result pt_results[MT_MAX_RL_ITEMS];
745-
/* audio rl pacing train result */
746-
struct mt_audio_pacing_train_result audio_pt_results[MT_MAX_RL_ITEMS];
747741

748742
/* function ops per interface(pf/vf) */
749743
uint64_t (*ptp_get_time_fn)(struct mtl_main_impl* impl, enum mtl_port port);

lib/src/mt_util.c

Lines changed: 14 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -251,13 +251,13 @@ int mt_build_port_map(struct mtl_main_impl* impl, char** ports, enum mtl_port* m
251251
return 0;
252252
}
253253

254-
int mt_pacing_train_result_add(struct mtl_main_impl* impl, enum mtl_port port,
255-
uint64_t rl_bps, float pad_interval) {
254+
int mt_pacing_train_pad_result_add(struct mtl_main_impl* impl, enum mtl_port port,
255+
uint64_t input_bps, float pad_interval) {
256256
struct mt_pacing_train_result* ptr = &mt_if(impl, port)->pt_results[0];
257257

258258
for (int i = 0; i < MT_MAX_RL_ITEMS; i++) {
259-
if (ptr[i].rl_bps) continue;
260-
ptr[i].rl_bps = rl_bps;
259+
if (ptr[i].input_bps) continue;
260+
ptr[i].input_bps = input_bps;
261261
ptr[i].pacing_pad_interval = pad_interval;
262262
return 0;
263263
}
@@ -266,12 +266,12 @@ int mt_pacing_train_result_add(struct mtl_main_impl* impl, enum mtl_port port,
266266
return -ENOMEM;
267267
}
268268

269-
int mt_pacing_train_result_search(struct mtl_main_impl* impl, enum mtl_port port,
270-
uint64_t rl_bps, float* pad_interval) {
269+
int mt_pacing_train_pad_result_search(struct mtl_main_impl* impl, enum mtl_port port,
270+
uint64_t rl_bps, float* pad_interval) {
271271
struct mt_pacing_train_result* ptr = &mt_if(impl, port)->pt_results[0];
272272

273273
for (int i = 0; i < MT_MAX_RL_ITEMS; i++) {
274-
if (rl_bps == ptr[i].rl_bps) {
274+
if (rl_bps == ptr[i].input_bps && ptr[i].pacing_pad_interval) {
275275
*pad_interval = ptr[i].pacing_pad_interval;
276276
return 0;
277277
}
@@ -281,9 +281,9 @@ int mt_pacing_train_result_search(struct mtl_main_impl* impl, enum mtl_port port
281281
return -EINVAL;
282282
}
283283

284-
int mt_audio_pacing_train_result_add(struct mtl_main_impl* impl, enum mtl_port port,
285-
uint64_t input_bps, uint64_t profiled_bps) {
286-
struct mt_audio_pacing_train_result* ptr = &mt_if(impl, port)->audio_pt_results[0];
284+
int mt_pacing_train_bps_result_add(struct mtl_main_impl* impl, enum mtl_port port,
285+
uint64_t input_bps, uint64_t profiled_bps) {
286+
struct mt_pacing_train_result* ptr = &mt_if(impl, port)->pt_results[0];
287287

288288
for (int i = 0; i < MT_MAX_RL_ITEMS; i++) {
289289
if (ptr[i].input_bps) continue;
@@ -296,12 +296,12 @@ int mt_audio_pacing_train_result_add(struct mtl_main_impl* impl, enum mtl_port p
296296
return -ENOMEM;
297297
}
298298

299-
int mt_audio_pacing_train_result_search(struct mtl_main_impl* impl, enum mtl_port port,
300-
uint64_t input_bps, uint64_t* profiled_bps) {
301-
struct mt_audio_pacing_train_result* ptr = &mt_if(impl, port)->audio_pt_results[0];
299+
int mt_pacing_train_bps_result_search(struct mtl_main_impl* impl, enum mtl_port port,
300+
uint64_t input_bps, uint64_t* profiled_bps) {
301+
struct mt_pacing_train_result* ptr = &mt_if(impl, port)->pt_results[0];
302302

303303
for (int i = 0; i < MT_MAX_RL_ITEMS; i++) {
304-
if (input_bps == ptr[i].input_bps) {
304+
if (input_bps == ptr[i].input_bps && ptr[i].profiled_bps) {
305305
*profiled_bps = ptr[i].profiled_bps;
306306
return 0;
307307
}

lib/src/mt_util.h

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -56,15 +56,15 @@ int mt_ring_dequeue_clean(struct rte_ring* ring);
5656

5757
void mt_mbuf_sanity_check(struct rte_mbuf** mbufs, uint16_t nb, char* tag);
5858

59-
int mt_pacing_train_result_add(struct mtl_main_impl* impl, enum mtl_port port,
60-
uint64_t rl_bps, float pad_interval);
61-
int mt_pacing_train_result_search(struct mtl_main_impl* impl, enum mtl_port port,
62-
uint64_t rl_bps, float* pad_interval);
63-
64-
int mt_audio_pacing_train_result_add(struct mtl_main_impl* impl, enum mtl_port port,
65-
uint64_t input_bps, uint64_t profiled_bps);
66-
int mt_audio_pacing_train_result_search(struct mtl_main_impl* impl, enum mtl_port port,
67-
uint64_t input_bps, uint64_t* profiled_bps);
59+
int mt_pacing_train_pad_result_add(struct mtl_main_impl* impl, enum mtl_port port,
60+
uint64_t input_bps, float pad_interval);
61+
int mt_pacing_train_pad_result_search(struct mtl_main_impl* impl, enum mtl_port port,
62+
uint64_t input_bps, float* pad_interval);
63+
64+
int mt_pacing_train_bps_result_add(struct mtl_main_impl* impl, enum mtl_port port,
65+
uint64_t input_bps, uint64_t profiled_bps);
66+
int mt_pacing_train_bps_result_search(struct mtl_main_impl* impl, enum mtl_port port,
67+
uint64_t input_bps, uint64_t* profiled_bps);
6868

6969
enum mtl_port mt_port_by_name(struct mtl_main_impl* impl, const char* name);
7070
int mt_build_port_map(struct mtl_main_impl* impl, char** ports, enum mtl_port* maps,

lib/src/st2110/pipeline/st20_pipeline_tx.c

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -299,8 +299,8 @@ static int tx_st20p_create_transport(struct mtl_main_impl* impl, struct st20p_tx
299299
if (ops->flags & ST20P_TX_FLAG_USER_TIMESTAMP)
300300
ops_tx.flags |= ST20_TX_FLAG_USER_TIMESTAMP;
301301
if (ops->flags & ST20P_TX_FLAG_ENABLE_VSYNC) ops_tx.flags |= ST20_TX_FLAG_ENABLE_VSYNC;
302-
if (ops->flags & ST20P_TX_FLAG_DISABLE_STATIC_PAD_P)
303-
ops_tx.flags |= ST20_TX_FLAG_DISABLE_STATIC_PAD_P;
302+
if (ops->flags & ST20P_TX_FLAG_ENABLE_STATIC_PAD_P)
303+
ops_tx.flags |= ST20_TX_FLAG_ENABLE_STATIC_PAD_P;
304304
if (ops->flags & ST20P_TX_FLAG_ENABLE_RTCP) {
305305
ops_tx.flags |= ST20_TX_FLAG_ENABLE_RTCP;
306306
ops_tx.rtcp = ops->rtcp;

lib/src/st2110/st_tx_audio_session.c

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1257,8 +1257,8 @@ static int tx_audio_session_init_rl(struct mtl_main_impl* impl,
12571257
port = mt_port_logic2phy(s->port_maps, i);
12581258

12591259
uint64_t initial_bytes_per_sec = tx_audio_session_initial_rl_bps(s);
1260-
int profiled = mt_audio_pacing_train_result_search(impl, port, initial_bytes_per_sec,
1261-
&profiled_per_sec);
1260+
int profiled = mt_pacing_train_bps_result_search(impl, port, initial_bytes_per_sec,
1261+
&profiled_per_sec);
12621262

12631263
/* pad pkt */
12641264
rl_port->pad = mt_build_pad(impl, mt_sys_tx_mempool(impl, port), port,
@@ -1297,7 +1297,7 @@ static int tx_audio_session_init_rl(struct mtl_main_impl* impl,
12971297
return -EIO;
12981298
}
12991299

1300-
mt_audio_pacing_train_result_add(impl, port, initial_bytes_per_sec, trained);
1300+
mt_pacing_train_bps_result_add(impl, port, initial_bytes_per_sec, trained);
13011301
info("%s(%d), trained bytes_per_sec %" PRIu64 "\n", __func__, idx, trained);
13021302
int ret = mt_txq_set_tx_bps(rl_port->queue[j], trained);
13031303
if (ret < 0) {

lib/src/st2110/st_tx_video_session.c

Lines changed: 32 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -322,14 +322,16 @@ static int tv_train_pacing(struct mtl_main_impl* impl, struct st_tx_video_sessio
322322
float pad_interval;
323323
uint64_t rl_bps = tv_rl_bps(s);
324324
uint64_t train_start_time, train_end_time;
325+
double measured_bps;
326+
uint64_t bps_to_set;
325327

326328
uint16_t resolved = s->ops.pad_interval;
327329
if (resolved) {
328330
s->pacing.pad_interval = resolved;
329331
info("%s(%d), user customized pad_interval %u\n", __func__, idx, resolved);
330332
return 0;
331333
}
332-
if (!(s->ops.flags & ST20_TX_FLAG_DISABLE_STATIC_PAD_P)) {
334+
if ((s->ops.flags & ST20_TX_FLAG_ENABLE_STATIC_PAD_P)) {
333335
resolved = st20_pacing_static_profiling(impl, s, s_port);
334336
if (resolved) {
335337
s->pacing.pad_interval = resolved;
@@ -338,7 +340,7 @@ static int tv_train_pacing(struct mtl_main_impl* impl, struct st_tx_video_sessio
338340
}
339341
}
340342

341-
ret = mt_pacing_train_result_search(impl, port, rl_bps, &pad_interval);
343+
ret = mt_pacing_train_pad_result_search(impl, port, rl_bps, &pad_interval);
342344
if (ret >= 0) {
343345
s->pacing.pad_interval = pad_interval;
344346
info("%s(%d), use pre-train pad_interval %f\n", __func__, idx, pad_interval);
@@ -423,10 +425,30 @@ static int tv_train_pacing(struct mtl_main_impl* impl, struct st_tx_video_sessio
423425
reactive = (s->ops.height == 480) ? 487.0 / 525.0 : 576.0 / 625.0;
424426
}
425427
pkts_per_frame = pkts_per_frame * reactive;
426-
if (pkts_per_frame < s->st20_total_pkts) {
427-
err("%s(%d), error pkts_per_frame %f, st20_total_pkts %d\n", __func__, idx,
428-
pkts_per_frame, s->st20_total_pkts);
429-
return -EINVAL;
428+
measured_bps = s->st20_pkt_size * pkts_per_sec * reactive;
429+
430+
/* If the measured speed is lower than expected. Set higher bps and retrain to add
431+
* padding */
432+
if (measured_bps < rl_bps) {
433+
info("%s(%d), measured bps %" PRIu64 " is lower then set bps %" PRIu64 "\n", __func__,
434+
idx, (uint64_t)measured_bps, rl_bps);
435+
436+
if (!mt_pacing_train_bps_result_search(impl, port, rl_bps, &bps_to_set)) {
437+
err("%s(%d), measured speed is too low on already trained bps\n", __func__, idx);
438+
return -EINVAL;
439+
}
440+
441+
/* Slightly increase the target bitrate to compensate for measurement inaccuracies,
442+
* rounding errors, and system overhead. This helps ensure the actual transmission bitrate
443+
* meets or exceeds the required rate
444+
*/
445+
#define INCREASE_BPS_FACTOR 1.005
446+
bps_to_set = INCREASE_BPS_FACTOR * (rl_bps * rl_bps) / measured_bps;
447+
info("%s(%d), increase bps to %" PRIu64 "\n", __func__, idx, bps_to_set);
448+
mt_pacing_train_bps_result_add(impl, port, rl_bps, bps_to_set);
449+
mt_txq_set_tx_bps(queue, bps_to_set);
450+
ret = tv_train_pacing(impl, s, s_port);
451+
return ret;
430452
}
431453

432454
pad_interval = (float)s->st20_total_pkts / (pkts_per_frame - s->st20_total_pkts);
@@ -437,7 +459,7 @@ static int tv_train_pacing(struct mtl_main_impl* impl, struct st_tx_video_sessio
437459
}
438460

439461
s->pacing.pad_interval = pad_interval;
440-
mt_pacing_train_result_add(impl, port, rl_bps, pad_interval);
462+
mt_pacing_train_pad_result_add(impl, port, rl_bps, pad_interval);
441463
train_end_time = mt_get_tsc(impl);
442464
info("%s(%d,%d), trained pad_interval %f pkts_per_frame %f with time %fs\n", __func__,
443465
idx, s_port, pad_interval, pkts_per_frame,
@@ -2526,6 +2548,7 @@ static int tv_init_hw(struct mtl_main_impl* impl, struct st_tx_video_sessions_mg
25262548
struct mt_txq_flow flow;
25272549
memset(&flow, 0, sizeof(flow));
25282550
flow.bytes_per_sec = tv_rl_bps(s);
2551+
mt_pacing_train_bps_result_search(impl, i, flow.bytes_per_sec, &flow.bytes_per_sec);
25292552
mtl_memcpy(&flow.dip_addr, &s->ops.dip_addr[i], MTL_IP_ADDR_LEN);
25302553
flow.dst_port = s->ops.udp_port[i];
25312554
if (ST21_TX_PACING_WAY_TSN == s->pacing_way[i])
@@ -3858,6 +3881,8 @@ int st20_tx_queue_fatal_error(struct mtl_main_impl* impl,
38583881
struct mt_txq_flow flow;
38593882
memset(&flow, 0, sizeof(flow));
38603883
flow.bytes_per_sec = tv_rl_bps(s);
3884+
mt_pacing_train_bps_result_search(impl, s_port, flow.bytes_per_sec,
3885+
&flow.bytes_per_sec);
38613886
mtl_memcpy(&flow.dip_addr, &s->ops.dip_addr[s_port], MTL_IP_ADDR_LEN);
38623887
flow.dst_port = s->ops.udp_port[s_port];
38633888
s->queue[s_port] = mt_txq_get(impl, port, &flow);
Lines changed: 55 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,55 @@
1+
From cca447de21727b653dd5251ceb960aa0a8d9a447 Mon Sep 17 00:00:00 2001
2+
From: Szumski Tomasz <[email protected]>
3+
Date: Fri, 11 Jul 2025 13:32:58 +0200
4+
Subject: [PATCH 1/4] vf: support kahawai runtime rl queue
5+
6+
---
7+
src/ice_virtchnl.c | 12 +++++++++---
8+
1 file changed, 9 insertions(+), 3 deletions(-)
9+
10+
diff --git a/src/ice_virtchnl.c b/src/ice_virtchnl.c
11+
index 0eb4250..040a1b4 100644
12+
--- a/src/ice_virtchnl.c
13+
+++ b/src/ice_virtchnl.c
14+
@@ -3657,6 +3657,11 @@ static int ice_vc_cfg_q_bw(struct ice_vf *vf, u8 *msg)
15+
16+
memcpy(vf->qs_bw, qs_bw, len);
17+
18+
+ /* for kahawai runtime rl */
19+
+ if (vf->qs_bw)
20+
+ if (ice_vf_cfg_qs_bw(vf, qbw->num_queues))
21+
+ v_ret = VIRTCHNL_STATUS_ERR_PARAM;
22+
+
23+
err_bw:
24+
kfree(qs_bw);
25+
26+
@@ -3835,12 +3840,12 @@ static int ice_vc_cfg_qs_msg(struct ice_vf *vf, u8 *msg)
27+
if (qpi->txq.ring_len > 0) {
28+
vsi->tx_rings[q_idx]->dma = qpi->txq.dma_ring_addr;
29+
vsi->tx_rings[q_idx]->count = qpi->txq.ring_len;
30+
-
31+
+#if 0 /* for kahawai runtime rl */
32+
/* Disable any existing queue first */
33+
if (ice_vf_vsi_dis_single_txq(vf, vsi, q_idx,
34+
qpi->txq.queue_id))
35+
goto error_param;
36+
-
37+
+#endif
38+
/* Configure a queue with the requested settings */
39+
if (ice_vsi_cfg_single_txq(vsi, vsi->tx_rings, q_idx)) {
40+
dev_warn(ice_pf_to_dev(pf), "VF-%d failed to configure TX queue %d\n",
41+
@@ -3929,9 +3934,10 @@ static int ice_vc_cfg_qs_msg(struct ice_vf *vf, u8 *msg)
42+
}
43+
}
44+
}
45+
-
46+
+#if 0 /* for kahawai runtime rl */
47+
if (ice_vf_cfg_qs_bw(vf, qci->num_queue_pairs))
48+
goto error_param;
49+
+#endif
50+
#ifdef HAVE_NETDEV_UPPER_INFO
51+
52+
if (lag && lag->bonded && lag->primary &&
53+
--
54+
2.34.1
55+

0 commit comments

Comments
 (0)