From nobody Sun Jul 26 13:27:01 2026 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=reject dis=none) header.from=google.com ARC-Seal: i=1; a=rsa-sha256; t=1781222596; cv=none; d=zohomail.com; s=zohoarc; b=G0EackQ5ppHNr1+2FVuOo8WTsyNsbnIC5VnSXjTPJKa3gjPMhkyrIKI8R5CkoWffj97jikOmBUbZzJOG1IS0FvGqJ5gDv50HYP8Gn0JNYFgD7qJqWx1p3cujq8sAti7Q+XRKCF+NACzwOBl4v1s3KFalfn2UgBSsu8t3Xx5Q7xU= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1781222596; h=Content-Type:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=zsmQrxXQS0GZSlMoFbsnEtj40NovT50DHi4yNaZAVWU=; b=gClZ5RSQs0KTg6/8hYpwglQKivnZq061nGSgjupRUXmp39ZB8TmVCGOion72ywijjRuNa+/hZgBg3vmnAvKWl1n8hZmnjA9tHxOtyXFjE8zvt32aIVTq0P4wYwCiBBhr7yx1kdTaZyXGJfz5K04L2nYcGjDqvAOswSb34/RMpqc= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=reject dis=none) Return-Path: Received: from lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1781222596372411.9621679125844; Thu, 11 Jun 2026 17:03:16 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wXpLw-0002Ci-CP; Thu, 11 Jun 2026 20:02:28 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from <3xiQragcKChU4C2365z19916z.x97Bz7F-yzGz689818F.9C1@flex--jrhilke.bounces.google.com>) id 1wXmhi-0000yw-DJ for qemu-devel@nongnu.org; Thu, 11 Jun 2026 17:12:48 -0400 Received: from mail-pj1-x104a.google.com ([2607:f8b0:4864:20::104a]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from <3xiQragcKChU4C2365z19916z.x97Bz7F-yzGz689818F.9C1@flex--jrhilke.bounces.google.com>) id 1wXmhe-0003n9-5o for qemu-devel@nongnu.org; Thu, 11 Jun 2026 17:12:43 -0400 Received: by mail-pj1-x104a.google.com with SMTP id 98e67ed59e1d1-36bc5e97950so346626a91.1 for ; Thu, 11 Jun 2026 14:12:40 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20251104; t=1781212359; x=1781817159; darn=nongnu.org; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:from:to:cc:subject:date:message-id:reply-to; bh=zsmQrxXQS0GZSlMoFbsnEtj40NovT50DHi4yNaZAVWU=; b=ggeFGIZ1Bbxatdn5mUnu2voJGYgshxIv0yEx8owQpMLb8QprTL2nbOgVrO5CitSQcg WYEN0FYw3YLu+dLmqufJ87ZT94e7R2gwBCs8t2c+iku3OkchHJ9ZfGgRH/BklkgrpDTp /ga9pxDh+PWh6BXdzsZ43GFFEkNlBInEu9LF0aa0nJBISYhm0zgh9DYkLu0hWcG/LQvo 0SvlVkUOtukNMUMbvDPm1gXDPc2kkGEVrZMSYgYx9yjz3KDlAy8kqVCSn1Gl5OWA5wze MqNbUBRjHrAbscGVW3FKLlYrdDDqe+rgrSe7M7PbWEMMOeiP124rVYAxdZY1QleRi4vi PMcg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1781212359; x=1781817159; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=zsmQrxXQS0GZSlMoFbsnEtj40NovT50DHi4yNaZAVWU=; b=ZF0no7JvroVRfKQv2y5jw2hdfuCLJr3gpo8oNDYA+KpVCl9rKwajYbASt9MG9mt+fb LAyrgGceeeDJuKHVsNhK8VrLL42MiWRf42vfkxQZpRVSV8tQgmQTVS3VzxvhYD6SFuGK ng0IFXWgMrPOUSVA+ng78XJQ4zyAx82NwIh6qPk1bIbSkDlAjZuP2ZjAYg6TNvbI+tCS IKXSvMYATuCIgGnUcwKNse0SGzIqNky9P0q8ot2pOPyuBY5m7h9oUukEXvYcEdU9CXZd 4gDXmwIjoEQbPNN6mdu/nG9L7OO/tRqIn6II/uzna8I03JYTwy3P//KF8QxvOlSKcb1m 2ZdQ== X-Forwarded-Encrypted: i=1; AFNElJ/9Hj0ee4TCZpJ5fMlULeMamlwz/XHO/3Y7AOZDZZfhwFRkZmhr9IiHMxe4W06fv1U6HXuOh6tuSwtW@nongnu.org X-Gm-Message-State: AOJu0Yy25WAVkF+uDyK5etM3hmXaiujkdM1j3Cx6VEF5tL2gAYycx1/3 iFxOT/U59S9m2xRZqMOC2hqFwFzqg078FaWD303KViaGLrybq3jyr2k2XSSzChwpZr8uv17lZUG jPme10bdt X-Received: from pjbfv16.prod.google.com ([2002:a17:90b:e90:b0:36b:2665:a2a3]) (user=jrhilke job=prod-delivery.src-stubby-dispatcher) by 2002:a17:90a:e7ce:b0:36d:ae6a:22ed with SMTP id 98e67ed59e1d1-37a041afaa2mr113350a91.22.1781212358685; Thu, 11 Jun 2026 14:12:38 -0700 (PDT) Date: Thu, 11 Jun 2026 21:11:26 +0000 In-Reply-To: <20260611-igb-trl-v2-0-bd58de9eb0fa@google.com> Mime-Version: 1.0 References: <20260611-igb-trl-v2-0-bd58de9eb0fa@google.com> X-Mailer: b4 0.14.3 Message-ID: <20260611-igb-trl-v2-1-bd58de9eb0fa@google.com> Subject: [PATCH v2 1/7] igb: Define TRL registers and core state From: Josh Hilke To: Akihiko Odaki , qemu-devel@nongnu.org Cc: Josh Hilke , Sriram Yagnaraman , Jason Wang , Fabiano Rosas , Laurent Vivier , Paolo Bonzini , David Matlack , Alex Williamson Content-Type: text/plain; charset="utf-8" Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists1p.gnu.org; Received-SPF: pass client-ip=2607:f8b0:4864:20::104a; envelope-from=3xiQragcKChU4C2365z19916z.x97Bz7F-yzGz689818F.9C1@flex--jrhilke.bounces.google.com; helo=mail-pj1-x104a.google.com X-Spam_score_int: -95 X-Spam_score: -9.6 X-Spam_bar: --------- X-Spam_report: (-9.6 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_MED=-0.001, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001, USER_IN_DEF_DKIM_WL=-7.5 autolearn=ham autolearn_force=no X-Spam_action: no action X-Mailman-Approved-At: Thu, 11 Jun 2026 20:02:23 -0400 X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: qemu development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @google.com) X-ZM-MESSAGEID: 1781222597471158500 Content-Transfer-Encoding: quoted-printable Introduce register offsets and bitmask constants for the Transmit Rate Limiter (TRL). Add the IGBTrlQueue structure and corresponding fields to IGBCore to track TRL state (timers, throttling status, and target rates) per queue. Initialize and free these timers during the device realize/uninit lifecycle, and reset them on device reset. Signed-off-by: Josh Hilke --- hw/net/igb_common.h | 1 + hw/net/igb_core.c | 17 +++++++++++++++++ hw/net/igb_core.h | 11 +++++++++++ hw/net/igb_regs.h | 11 +++++++++++ 4 files changed, 40 insertions(+) diff --git a/hw/net/igb_common.h b/hw/net/igb_common.h index b316a5b..8c0a0cf 100644 --- a/hw/net/igb_common.h +++ b/hw/net/igb_common.h @@ -148,6 +148,7 @@ enum { defreg(MTA_A), =20 defreg(VTIVAR), defreg(VTIVAR_MISC), + defreg(TRLDQSEL), defreg(TRLRC), }; =20 uint64_t igb_mmio_read(void *opaque, hwaddr addr, unsigned size); diff --git a/hw/net/igb_core.c b/hw/net/igb_core.c index 45d8fd7..05d8241 100644 --- a/hw/net/igb_core.c +++ b/hw/net/igb_core.c @@ -4282,6 +4282,11 @@ igb_autoneg_resume(IGBCore *core) } } =20 +static void igb_trl_timer_cb(void *opaque) +{ + /* Stub */ +} + void igb_core_pci_realize(IGBCore *core, const uint16_t *eeprom_templ, @@ -4296,6 +4301,11 @@ igb_core_pci_realize(IGBCore *core, =20 for (i =3D 0; i < IGB_NUM_QUEUES; i++) { net_tx_pkt_init(&core->tx[i].tx_pkt, E1000E_MAX_TX_FRAGS); + core->trl[i].timer =3D + timer_new_ns(QEMU_CLOCK_VIRTUAL, igb_trl_timer_cb, + &core->trl[i]); + core->trl[i].core =3D core; + core->trl[i].queue_idx =3D i; } =20 net_rx_pkt_init(&core->rx_pkt); @@ -4319,6 +4329,7 @@ igb_core_pci_uninit(IGBCore *core) =20 for (i =3D 0; i < IGB_NUM_QUEUES; i++) { net_tx_pkt_uninit(core->tx[i].tx_pkt); + timer_free(core->trl[i].timer); } =20 net_rx_pkt_uninit(core->rx_pkt); @@ -4469,6 +4480,12 @@ static void igb_reset(IGBCore *core, bool sw) =20 igb_intrmgr_reset(core); =20 + for (i =3D 0; i < IGB_NUM_QUEUES; i++) { + timer_del(core->trl[i].timer); + core->trl[i].trlrc =3D 0; + core->trl[i].target_rate =3D 0; + } + memset(core->phy, 0, sizeof core->phy); memcpy(core->phy, igb_phy_reg_init, sizeof igb_phy_reg_init); =20 diff --git a/hw/net/igb_core.h b/hw/net/igb_core.h index d70b54e..49733b1 100644 --- a/hw/net/igb_core.h +++ b/hw/net/igb_core.h @@ -63,6 +63,14 @@ typedef struct IGBIntrDelayTimer_st { IGBCore *core; } IGBIntrDelayTimer; =20 +typedef struct IGBTrlQueue_st { + QEMUTimer *timer; + IGBCore *core; + int queue_idx; + uint32_t trlrc; + uint64_t target_rate; +} IGBTrlQueue; + struct IGBCore { uint32_t mac[E1000E_MAC_SIZE]; uint16_t phy[MAX_PHY_REG_ADDRESS + 1]; @@ -99,6 +107,9 @@ struct IGBCore { void (*owner_start_recv)(PCIDevice *d); =20 int64_t timadj; + + /* Transmit Rate Limiting */ + IGBTrlQueue trl[IGB_NUM_QUEUES]; }; =20 void diff --git a/hw/net/igb_regs.h b/hw/net/igb_regs.h index 4dc4c31..f7895ef 100644 --- a/hw/net/igb_regs.h +++ b/hw/net/igb_regs.h @@ -718,4 +718,15 @@ static inline uint8_t igb_ivar_entry_tx(uint8_t i) return i < 8 ? i * 4 + 1 : (i - 8) * 4 + 3; } =20 +/* Transmit Rate Limiting */ +#define E1000_TRLDQSEL 0x03604 +#define E1000_TRLRC 0x036B0 + +#define E1000_TRLRC_RS_ENA BIT(31) +#define E1000_TRLRC_RF_DEC_MASK 0x3FFF +#define E1000_TRLRC_RF_INT_MASK 0x3FF + +/* 1 Gbps link rate in bytes per second (1,000,000,000 bits/s / 8) */ +#define E1000_LINK_RATE_1GBPS 125000000ULL + #endif --=20 2.54.0.1136.gdb2ca164c4-goog From nobody Sun Jul 26 13:27:01 2026 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=reject dis=none) header.from=google.com ARC-Seal: i=1; a=rsa-sha256; t=1781222620; cv=none; d=zohomail.com; s=zohoarc; b=dtuTwm7yPuuyihJ+wEMInwTk/0mOCYC/v90xNYQ1ug6Lxz23dgKeI1InHR9CTMTYUBbaI3Yzdx2O6AgMuClYA3nCcarI889iS9ZuImXwsLRxbdP8q5Qxr38hhaBqHdx5SB2GVBpvLwOozoWbwMBaQj07uSsWAbL5P6fqTrvNQSU= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1781222620; h=Content-Type:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=2xPO1Xzp02sOFKWBaAuURUpWcrRSzM55cLi6BAn4M9c=; b=IABpgJMpGpFJBpevUCgpOG8OBDqmjcOR2l+0n5YH8AP1tfR9nKDd7dGBEBXkzcP3DxXh4QI58sDNCDIfg5/kZWPOgqvg1W4cfL+MaP3YamsgYCjRBpCTLVqLJqXcIEHLk5Sezmm2gypBkC+SM+fH4ymdHc7T16Cf9KQ6RkJQ7GE= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=reject dis=none) Return-Path: Received: from lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1781222620407442.81807171846003; Thu, 11 Jun 2026 17:03:40 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wXpLt-0002BQ-Qn; Thu, 11 Jun 2026 20:02:25 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from <3yCQragcKChc6E458713BB381.zB9D19H-01I18ABA3AH.BE3@flex--jrhilke.bounces.google.com>) id 1wXmhk-0000z9-8u for qemu-devel@nongnu.org; Thu, 11 Jun 2026 17:12:51 -0400 Received: from mail-pf1-x449.google.com ([2607:f8b0:4864:20::449]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from <3yCQragcKChc6E458713BB381.zB9D19H-01I18ABA3AH.BE3@flex--jrhilke.bounces.google.com>) id 1wXmhh-0003nH-6p for qemu-devel@nongnu.org; Thu, 11 Jun 2026 17:12:47 -0400 Received: by mail-pf1-x449.google.com with SMTP id d2e1a72fcca58-8422a0eee68so403782b3a.0 for ; Thu, 11 Jun 2026 14:12:41 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20251104; t=1781212361; x=1781817161; darn=nongnu.org; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:from:to:cc:subject:date:message-id:reply-to; bh=2xPO1Xzp02sOFKWBaAuURUpWcrRSzM55cLi6BAn4M9c=; b=H1fhxOF1kGcwLbtlhm8sKUoNKysfxUz0JapL4sLE0O1XeAv3cmVWhA2ooqvMWAEDFA 5y96K3keVzt/vk0JaNOLnufFdkoramY/fC5xaN0p4xUzqOtEu/W+iyh1/tdxwXoLmjI2 X3kVoMbfrs2iP+eJK9FRBB1FrxbzGBst7XxM/hNaXZDxmJ7n7s1hnaR8Jt9Xri38exL7 ijIydbUN21ahTSyTAg9F7laeebna+3VzftM0KtmuF59VGu2IeZraYdK+cujWaGauQZRg m0YNcludvmHSEg7X6DAU/+9JxpvZ5oEE/ta6hOTmrfhDat0e7ObrUvXTdWP8+Mxsrzao Z2SQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1781212361; x=1781817161; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=2xPO1Xzp02sOFKWBaAuURUpWcrRSzM55cLi6BAn4M9c=; b=TccKs7Xp1w3t2G2dim51DiNnph5wNEYIaBxWPT1J8XmfUkWt0mVHkf0x0pwzZoTyIq iieCH61RMDNDSlzAtMZJ0474Pdzh1JftwrJ9pTU5O+0HrtOBJ0wyo/YJJEJAkHYgTxh9 S5KcSovy2BWy1D7+QXHAxDY7qnEs1epnePoWHkRTIiP9n2wkuR1Z2oh9tsKXfVbyJ3t5 CHydv3oUFVwxdizrYw9xY5Uzg/SoclE1DF4eAum3ocmzsSm3OSi7guN5mqT4dMDlC91c KOVYmnIYXiKeA7Ptk87EDmeH5svtgdl8Ey5/6FOusbAE1l+KR12OxKDZIA2/FDGQR99n ME8Q== X-Forwarded-Encrypted: i=1; AFNElJ/xerzhWP/LHcJjVrQOhSQfIQ8t8SV1OXQMV2S3sKbkp/SNo9nRWMvOpOf/aE/Fy5QH6rExira4wx3c@nongnu.org X-Gm-Message-State: AOJu0Yw6famDbmvXTTN5dK3lcuIAUYR4iw22C2PhXCHG8uEqG9ynaMpz /UY4PDS8AA4Cpg8asTTdSiWYZoH5agD0YMCdHQjQ4Gn7/sBiyx/rUaNPjx4a9748RVnmNYuEOpt ZLFQLsV1X X-Received: from pfdj8.prod.google.com ([2002:a05:6a00:9508:b0:842:2674:ba4e]) (user=jrhilke job=prod-delivery.src-stubby-dispatcher) by 2002:a05:6a00:1d90:b0:841:58b0:82bb with SMTP id d2e1a72fcca58-843367c711bmr4966176b3a.9.1781212360720; Thu, 11 Jun 2026 14:12:40 -0700 (PDT) Date: Thu, 11 Jun 2026 21:11:27 +0000 In-Reply-To: <20260611-igb-trl-v2-0-bd58de9eb0fa@google.com> Mime-Version: 1.0 References: <20260611-igb-trl-v2-0-bd58de9eb0fa@google.com> X-Mailer: b4 0.14.3 Message-ID: <20260611-igb-trl-v2-2-bd58de9eb0fa@google.com> Subject: [PATCH v2 2/7] igb: Add VMState support for TRL state From: Josh Hilke To: Akihiko Odaki , qemu-devel@nongnu.org Cc: Josh Hilke , Sriram Yagnaraman , Jason Wang , Fabiano Rosas , Laurent Vivier , Paolo Bonzini , David Matlack , Alex Williamson Content-Type: text/plain; charset="utf-8" Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists1p.gnu.org; Received-SPF: pass client-ip=2607:f8b0:4864:20::449; envelope-from=3yCQragcKChc6E458713BB381.zB9D19H-01I18ABA3AH.BE3@flex--jrhilke.bounces.google.com; helo=mail-pf1-x449.google.com X-Spam_score_int: -95 X-Spam_score: -9.6 X-Spam_bar: --------- X-Spam_report: (-9.6 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_MED=-0.001, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001, USER_IN_DEF_DKIM_WL=-7.5 autolearn=ham autolearn_force=no X-Spam_action: no action X-Mailman-Approved-At: Thu, 11 Jun 2026 20:02:23 -0400 X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: qemu development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @google.com) X-ZM-MESSAGEID: 1781222621217158500 Content-Transfer-Encoding: quoted-printable Add VMState representation for the Transmit Rate Limiter (TRL) state to support migration. This includes the TRL timers and target rates per queue. Signed-off-by: Josh Hilke --- hw/net/igb.c | 44 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 44 insertions(+) diff --git a/hw/net/igb.c b/hw/net/igb.c index c076807..edf021a 100644 --- a/hw/net/igb.c +++ b/hw/net/igb.c @@ -563,6 +563,46 @@ static const VMStateDescription igb_vmstate_intr_timer= =3D { VMSTATE_STRUCT_ARRAY(_f, _s, _num, 0, \ igb_vmstate_intr_timer, IGBIntrDelayTimer) =20 +static bool igb_trl_needed(void *opaque) +{ + IGBState *s =3D opaque; + + for (int i =3D 0; i < IGB_NUM_QUEUES; i++) { + if (s->core.trl[i].target_rate > 0) { + return true; + } + } + + return false; +} + +static const VMStateDescription igb_vmstate_trl_queue =3D { + .name =3D "igb-trl-queue", + .version_id =3D 1, + .minimum_version_id =3D 1, + .fields =3D (const VMStateField[]) { + VMSTATE_TIMER_PTR(timer, IGBTrlQueue), + VMSTATE_UINT32(trlrc, IGBTrlQueue), + VMSTATE_UINT64(target_rate, IGBTrlQueue), + VMSTATE_END_OF_LIST() + } +}; + +#define VMSTATE_IGB_TRL_QUEUE_ARRAY(_f, _s, _num) \ + VMSTATE_STRUCT_ARRAY(_f, _s, _num, 0, \ + igb_vmstate_trl_queue, IGBTrlQueue) + +static const VMStateDescription igb_vmstate_trl_state =3D { + .name =3D "igb/trl_state", + .version_id =3D 1, + .minimum_version_id =3D 1, + .needed =3D igb_trl_needed, + .fields =3D (const VMStateField[]) { + VMSTATE_IGB_TRL_QUEUE_ARRAY(core.trl, IGBState, IGB_NUM_QUEUES), + VMSTATE_END_OF_LIST() + } +}; + static const VMStateDescription igb_vmstate =3D { .name =3D "igb", .version_id =3D 1, @@ -591,6 +631,10 @@ static const VMStateDescription igb_vmstate =3D { VMSTATE_INT64(core.timadj, IGBState), =20 VMSTATE_END_OF_LIST() + }, + .subsections =3D (const VMStateDescription * const []) { + &igb_vmstate_trl_state, + NULL } }; =20 --=20 2.54.0.1136.gdb2ca164c4-goog From nobody Sun Jul 26 13:27:01 2026 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=reject dis=none) header.from=google.com ARC-Seal: i=1; a=rsa-sha256; t=1781222599; cv=none; d=zohomail.com; s=zohoarc; b=VDRVJr9In4oB5W856t52EAObqQTU2Eo2C509cpNsLHJ8ViRlNMpQIGZD/eC/BvxLbzSrdlPxLUOd00lOvR48kdvm1R9KT/Bbycj+z5OsSK3NC750N40h8PXVtHX+SEJWfPukqoRcGBpbrsEFUcmxFNqXaF8qMrjxfSuVD9cTWuM= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1781222599; h=Content-Type:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=qwrI4yZGfFqiYcIJOH0iEIRHDylxXXDO0YZSjYsed6w=; b=injpbl6PTxTvIKx4ThLcsndrfAHIzTwDl6hkpl/tsSo9dQXdb+lDDXykPKwoSQoAULHVS/7e+sa4K7pxxWj25CdN7LcNKYjC0SsXLqaWN09tE/TEidxIshZNJwBpt38htnGs07cDzR4UKjZ8wAMBxngPaIANZ8nuzhAsYhRgupk= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=reject dis=none) Return-Path: Received: from lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1781222599182388.58162208065835; Thu, 11 Jun 2026 17:03:19 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wXpLt-0002B2-70; Thu, 11 Jun 2026 20:02:25 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from <3yyQragcKCho9H78BA46EE6B4.2ECG4CK-34L4BDED6DK.EH6@flex--jrhilke.bounces.google.com>) id 1wXmhm-0000zP-NP for qemu-devel@nongnu.org; Thu, 11 Jun 2026 17:12:52 -0400 Received: from mail-pl1-x64a.google.com ([2607:f8b0:4864:20::64a]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from <3yyQragcKCho9H78BA46EE6B4.2ECG4CK-34L4BDED6DK.EH6@flex--jrhilke.bounces.google.com>) id 1wXmhk-0003ni-1F for qemu-devel@nongnu.org; Thu, 11 Jun 2026 17:12:50 -0400 Received: by mail-pl1-x64a.google.com with SMTP id d9443c01a7336-2bf1dece2ecso2668065ad.1 for ; Thu, 11 Jun 2026 14:12:44 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20251104; t=1781212363; x=1781817163; darn=nongnu.org; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:from:to:cc:subject:date:message-id:reply-to; bh=qwrI4yZGfFqiYcIJOH0iEIRHDylxXXDO0YZSjYsed6w=; b=Tv29Iv9TIAdj30bO1SCIDd6yFOIg5zEp4ALQje/FucMDkDHQd7jEXBmGPMx1/e4e+C wfU+JzjNc3gl0bZY/CbJ2wwOPDqub10lo1Iga9OIVRRCWLE/oUTzE8eKWsERc7lUZu3+ 49p/9s+BU6prRuYJPxWLFxTB9D2m4IbCnab2xINj39iAtTo/QsE89Y/8olwCjpc3qp3n kXQuwcjeAhdLLE0maEfVzuLShJ6i6W0GtkZy6rKgU3HeOXBFnAHVCAZMuPIvK+nxE3ws Fl90FArQLJjb5P26xRPtK23g9FUjvgxRDO85o+NwPqV8rTo5jTGTdKX6HC79pJoZBd88 NIzw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1781212363; x=1781817163; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=qwrI4yZGfFqiYcIJOH0iEIRHDylxXXDO0YZSjYsed6w=; b=e8c1rbxaEq4yyIa9sC1rqJ2TpB0nqj4EWEORQ+uGUIksw3KKtFpN9AAod8CxeqQYi/ 6+3dz/lWM9dV1l4jNvjhNgVWJw1bEgLoZAReAWF5V6CIVfDHBlNi1udSOBlozgavpuqT QEiFEdBaeU05IiSf9A8faPm6Y244cERv46YrerZBsJ6r1p5P8LEtqD/qTCXT+axmP5Gt Sl6rH/bNlPCvhn+sgW45S22acstf0BFBGBsiFpowgarfq7OzNqX7kRDsSZZw9DZ4ONA0 9wBJeZDgjTlpMzfIhTWnkwc2raFuq7BIeENQbmHdb4PyXYSBA/2suHQBufmoVHf13y59 4VPg== X-Forwarded-Encrypted: i=1; AFNElJ9eRgVRhe+6satsY6lFhWno6gXx5HwDVInhw+YeI+1w/BVbJHicdKGggMkIEIGLdZH9NLmuMC/8dY/B@nongnu.org X-Gm-Message-State: AOJu0YxT0CActgHRfbtHoU76nZ1+/G6oz2DQA6S919lhVEURhKWv1PBZ a3D4Og9H9YEdVor75RL/YCHbHjkiw4e0pp8cPSLCHJqpVLF40jZzLmVPyWv9MN+NQaTbHVA9vVD MVQR68sQv X-Received: from plzv4.prod.google.com ([2002:a17:902:b7c4:b0:2bd:40d4:e407]) (user=jrhilke job=prod-delivery.src-stubby-dispatcher) by 2002:a17:903:943:b0:2c1:f29a:b554 with SMTP id d9443c01a7336-2c41255da68mr1004775ad.21.1781212363098; Thu, 11 Jun 2026 14:12:43 -0700 (PDT) Date: Thu, 11 Jun 2026 21:11:28 +0000 In-Reply-To: <20260611-igb-trl-v2-0-bd58de9eb0fa@google.com> Mime-Version: 1.0 References: <20260611-igb-trl-v2-0-bd58de9eb0fa@google.com> X-Mailer: b4 0.14.3 Message-ID: <20260611-igb-trl-v2-3-bd58de9eb0fa@google.com> Subject: [PATCH v2 3/7] igb: Implement TRL register write and configuration From: Josh Hilke To: Akihiko Odaki , qemu-devel@nongnu.org Cc: Josh Hilke , Sriram Yagnaraman , Jason Wang , Fabiano Rosas , Laurent Vivier , Paolo Bonzini , David Matlack , Alex Williamson Content-Type: text/plain; charset="utf-8" Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists1p.gnu.org; Received-SPF: pass client-ip=2607:f8b0:4864:20::64a; envelope-from=3yyQragcKCho9H78BA46EE6B4.2ECG4CK-34L4BDED6DK.EH6@flex--jrhilke.bounces.google.com; helo=mail-pl1-x64a.google.com X-Spam_score_int: -95 X-Spam_score: -9.6 X-Spam_bar: --------- X-Spam_report: (-9.6 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_MED=-0.001, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001, USER_IN_DEF_DKIM_WL=-7.5 autolearn=ham autolearn_force=no X-Spam_action: no action X-Mailman-Approved-At: Thu, 11 Jun 2026 20:02:23 -0400 X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: qemu development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @google.com) X-ZM-MESSAGEID: 1781222601617158500 Content-Transfer-Encoding: quoted-printable Implement write handlers for TLDQSEL and TRLRC registers to allow the guest to configure Transmit Rate Limiting. Translate the register Rate Factor into a physical target rate (bytes/sec) per queue. Disable TRL and clear timers when the link status changes or when TRL is disabled by the guest. Signed-off-by: Josh Hilke --- hw/net/igb_core.c | 79 +++++++++++++++++++++++++++++++++++++++++++++++++++= +++- 1 file changed, 78 insertions(+), 1 deletion(-) diff --git a/hw/net/igb_core.c b/hw/net/igb_core.c index 05d8241..90d94d4 100644 --- a/hw/net/igb_core.c +++ b/hw/net/igb_core.c @@ -2136,11 +2136,29 @@ igb_set_phy_ctrl(IGBCore *core, uint16_t val) } } =20 +static void igb_trl_disable_queue(IGBCore *core, int qidx) +{ + core->trl[qidx].target_rate =3D 0; + core->trl[qidx].trlrc =3D 0; + + timer_del(core->trl[qidx].timer); +} + +static void igb_trl_disable(IGBCore *core) +{ + for (int i =3D 0; i < IGB_NUM_QUEUES; i++) { + igb_trl_disable_queue(core, i); + } + core->mac[TRLRC] &=3D ~E1000_TRLRC_RS_ENA; +} + void igb_core_set_link_status(IGBCore *core) { NetClientState *nc =3D qemu_get_queue(core->owner_nic); uint32_t old_status =3D core->mac[STATUS]; =20 + igb_trl_disable(core); + trace_e1000e_link_status_changed(nc->link_down ? false : true); =20 if (nc->link_down) { @@ -2623,6 +2641,62 @@ static void igb_set_vtivar(IGBCore *core, int index,= uint32_t val) */ } =20 +static uint32_t igb_get_trlrc(IGBCore *core, int index) +{ + int qidx =3D core->mac[TRLDQSEL]; + + return core->trl[qidx].trlrc; +} + +static void igb_set_trldqsel(IGBCore *core, int index, uint32_t val) +{ + core->mac[index] =3D val & 0xF; +} + +static void igb_set_trlrc(IGBCore *core, int index, uint32_t val) +{ + uint64_t rf_scaled; + int qidx; + + core->mac[index] =3D val; + + qidx =3D core->mac[TRLDQSEL]; + core->trl[qidx].trlrc =3D val; + + if (!(val & E1000_TRLRC_RS_ENA)) { + goto disable; + } + + /* + * The TRLRC register stores the Rate Factor in 10.14 fixed-point form= at: + * - Bits 13:0: Fractional part + * - Bits 23:14: Integer part + * + * Combined, the lower 24 bits of the register (23:0) represent the + * concatenated 24-bit scaled Rate Factor directly. + */ + rf_scaled =3D val & 0xFFFFFF; + + /* Zero is not a valid rate factor, treat as disabled */ + if (rf_scaled =3D=3D 0) { + goto disable; + } + /* + * The rate factor is a fixed-point number with a 14-bit fractional pa= rt: + * Rate Factor =3D rf_scaled / 2^14 + * + * The target rate is: + * Target Rate =3D Link Rate / Rate Factor + * =3D Link Rate / (rf_scaled / 2^14) + * =3D (Link Rate * 2^14) / rf_scaled + */ + core->trl[qidx].target_rate =3D (E1000_LINK_RATE_1GBPS << 14) / rf_sca= led; + return; + +disable: + igb_trl_disable_queue(core, qidx); +} + static inline void igb_autoneg_timer(void *opaque) { @@ -3678,6 +3752,7 @@ static const readops igb_macreg_readops[] =3D { [RQDPC15] =3D igb_mac_read_clr4, [VTIVAR ... VTIVAR + 7] =3D igb_mac_readreg, [VTIVAR_MISC ... VTIVAR_MISC + 7] =3D igb_mac_readreg, + [TRLRC] =3D igb_get_trlrc, }; enum { IGB_NREADOPS =3D ARRAY_SIZE(igb_macreg_readops) }; =20 @@ -4126,7 +4201,9 @@ static const writeops igb_macreg_writeops[] =3D { [PVTEICR6] =3D igb_set_vteicr, [PVTEICR7] =3D igb_set_vteicr, [VTIVAR ... VTIVAR + 7] =3D igb_set_vtivar, - [VTIVAR_MISC ... VTIVAR_MISC + 7] =3D igb_mac_writereg + [VTIVAR_MISC ... VTIVAR_MISC + 7] =3D igb_mac_writereg, + [TRLDQSEL] =3D igb_set_trldqsel, + [TRLRC] =3D igb_set_trlrc }; enum { IGB_NWRITEOPS =3D ARRAY_SIZE(igb_macreg_writeops) }; =20 --=20 2.54.0.1136.gdb2ca164c4-goog From nobody Sun Jul 26 13:27:01 2026 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=reject dis=none) header.from=google.com ARC-Seal: i=1; a=rsa-sha256; t=1781222578; cv=none; d=zohomail.com; s=zohoarc; b=X1jtsgat8jCw2wlcLtyYfMi2LB0xHAUZYhKoo4s4R9SEMbK439ZnIG1hf0hMz0x2n4fkeybNimI0GkmqaUxrXcQBN4vIe0hTLr3mbcXD8LQj1aTX7uGIUomf3aVbYZ92/TyvUuajbNZBMoXZcXWpgUQiZBiPdXU5ueCpq+o8HtA= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1781222578; h=Content-Type:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=YrpnyWY6NdUpkf/BBaAQQB93oC6zEFtKos4E5qLpdeU=; b=Hl9QXebepebEkOcyNxMUThmvQ7BPEKz3WUKGGo2ZVnPzl9IiipDc+8fQeOfE0Gx6EyhpdpJT+taRRbsBD8623yLLn5k1258K/RVrrCdvG7m0DW2RsvBGVbOanetgeDE9uI+TOnMNgYwU5Xy2lKSYmlWs6jdW7rkBN3/uR+bkeFI= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=reject dis=none) Return-Path: Received: from lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1781222578525547.7591330224575; Thu, 11 Jun 2026 17:02:58 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wXpLw-0002Ce-87; Thu, 11 Jun 2026 20:02:28 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from <3zSQragcKChwBJ9ADC68GG8D6.4GEI6EM-56N6DFGF8FM.GJ8@flex--jrhilke.bounces.google.com>) id 1wXmho-0000zh-SK for qemu-devel@nongnu.org; Thu, 11 Jun 2026 17:12:53 -0400 Received: from mail-pf1-x449.google.com ([2607:f8b0:4864:20::449]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from <3zSQragcKChwBJ9ADC68GG8D6.4GEI6EM-56N6DFGF8FM.GJ8@flex--jrhilke.bounces.google.com>) id 1wXmhl-0003o9-6m for qemu-devel@nongnu.org; Thu, 11 Jun 2026 17:12:51 -0400 Received: by mail-pf1-x449.google.com with SMTP id d2e1a72fcca58-8422382178bso185132b3a.2 for ; Thu, 11 Jun 2026 14:12:47 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20251104; t=1781212366; x=1781817166; darn=nongnu.org; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:from:to:cc:subject:date:message-id:reply-to; bh=YrpnyWY6NdUpkf/BBaAQQB93oC6zEFtKos4E5qLpdeU=; b=uQk9x/St4V0+oRKuah0yET8DaYl2LXXvhaml480LyKUWCkNktSikFwTRFikqNvcD1d nKNkam/DGsTRdhfHL/pG3KmBHr3dhWA58jf++TlCnlKSkQ5y1q0k7qxa4YSD1eOYd7SW Nkiq+/2vvvifWFdup74h20WEF6mPTVicdGEqkEq3AdW8jctGnk3Q0C8ZKF7yCtI1XJ00 zbdV34epWaMDlTOfHHhFJzarBFCTAyAo++4oVxaqqSpTDUaK+BIEb3qJHMyJpc/B7oN1 EvisCFqK3eA3fP+aYJCqloS1CaCKjFLcG3tCg3+Umb1SP6NXVoBEVjMqnS+H3WBbW7xH aEtg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1781212366; x=1781817166; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=YrpnyWY6NdUpkf/BBaAQQB93oC6zEFtKos4E5qLpdeU=; b=okm65R2359xkXEpwnXZ4QrvpgUa+DXt+7ABjYWUCElQXAp4dSoewRkumYAYSDcwUqi jarHf8JqDdXlfrwFT8IIes8mFiXSJ0nOIClJD2xRtrdVAvi6B2t+Hh3IvndQSrZniwHS B+BKIIP7deZ7fVYLBCiN9br6tzz6Vqz7POAuOjAvFjK0vYctnQQ7jdsDozA9FwISoA6C 2ZmuvGaFwMKUO61tVoWAb8f+CbwW6naFV1vnOjYgrSwpXJHi6wHTETb11S4YK2wypHBt /4jZYoX0IMcB/KnWYVmh7OLP160tcGoYskdEYta/+NSvCZnV/gpXuJKnI1jeCcQewgwi GSVQ== X-Forwarded-Encrypted: i=1; AFNElJ+Rl03/Lm96uOFGr0GLBMADoLEgatKhbQ7G+RO2VZhncsZAQneRspR0bEOKiGspusfNY+grkOVogOBW@nongnu.org X-Gm-Message-State: AOJu0YyMxlcCAweDmVvypk7Lai8Ln2vGRc8dhV3Hp3SsqiEVydaOtRjJ sOtnKkKfN9OSzpkQEQJ12+1TcfdMG5Xttq3An2OrAVtu0r5bFdbfYfjieOFnNfhofZzH1dD3CG1 2LgukEJ0N X-Received: from pfbll5.prod.google.com ([2002:a05:6a00:7285:b0:842:49cf:8c4b]) (user=jrhilke job=prod-delivery.src-stubby-dispatcher) by 2002:a05:6a00:1701:b0:842:3be7:4d57 with SMTP id d2e1a72fcca58-843368068e9mr4995056b3a.18.1781212365878; Thu, 11 Jun 2026 14:12:45 -0700 (PDT) Date: Thu, 11 Jun 2026 21:11:29 +0000 In-Reply-To: <20260611-igb-trl-v2-0-bd58de9eb0fa@google.com> Mime-Version: 1.0 References: <20260611-igb-trl-v2-0-bd58de9eb0fa@google.com> X-Mailer: b4 0.14.3 Message-ID: <20260611-igb-trl-v2-4-bd58de9eb0fa@google.com> Subject: [PATCH v2 4/7] igb: Refactor TX path to return processed byte count From: Josh Hilke To: Akihiko Odaki , qemu-devel@nongnu.org Cc: Josh Hilke , Sriram Yagnaraman , Jason Wang , Fabiano Rosas , Laurent Vivier , Paolo Bonzini , David Matlack , Alex Williamson Content-Type: text/plain; charset="utf-8" Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists1p.gnu.org; Received-SPF: pass client-ip=2607:f8b0:4864:20::449; envelope-from=3zSQragcKChwBJ9ADC68GG8D6.4GEI6EM-56N6DFGF8FM.GJ8@flex--jrhilke.bounces.google.com; helo=mail-pf1-x449.google.com X-Spam_score_int: -95 X-Spam_score: -9.6 X-Spam_bar: --------- X-Spam_report: (-9.6 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_MED=-0.001, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001, USER_IN_DEF_DKIM_WL=-7.5 autolearn=ham autolearn_force=no X-Spam_action: no action X-Mailman-Approved-At: Thu, 11 Jun 2026 20:02:23 -0400 X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: qemu development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @google.com) X-ZM-MESSAGEID: 1781222581692158500 Content-Transfer-Encoding: quoted-printable Modify igb_process_tx_desc to return the total size of the transmitted packet (in bytes) when processing the End of Packet (EOP) descriptor, and 0 otherwise. This allows the transmission loop to track how many bytes are being sent for rate-limiting calculations. Signed-off-by: Josh Hilke --- hw/net/igb_core.c | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/hw/net/igb_core.c b/hw/net/igb_core.c index 90d94d4..1c05276 100644 --- a/hw/net/igb_core.c +++ b/hw/net/igb_core.c @@ -599,7 +599,7 @@ igb_on_tx_done_update_stats(IGBCore *core, struct NetTx= Pkt *tx_pkt, int qn) } } =20 -static void +static size_t igb_process_tx_desc(IGBCore *core, PCIDevice *dev, struct igb_tx *tx, @@ -632,10 +632,10 @@ igb_process_tx_desc(IGBCore *core, tx->ctx[idx].seqnum_seed =3D le32_to_cpu(tx_ctx_desc->seqnum_s= eed); tx->ctx[idx].type_tucmd_mlhl =3D le32_to_cpu(tx_ctx_desc->type= _tucmd_mlhl); tx->ctx[idx].mss_l4len_idx =3D le32_to_cpu(tx_ctx_desc->mss_l4= len_idx); - return; + return 0; } else { /* unknown descriptor type */ - return; + return 0; } } else { /* legacy descriptor */ @@ -654,7 +654,9 @@ igb_process_tx_desc(IGBCore *core, } =20 if (cmd_type_len & E1000_TXD_CMD_EOP) { + size_t total_len =3D 0; if (!tx->skip_cp && net_tx_pkt_parse(tx->tx_pkt)) { + total_len =3D net_tx_pkt_get_total_len(tx->tx_pkt); idx =3D (tx->first_olinfo_status >> 4) & 1; igb_tx_insert_vlan(core, queue_index, tx, tx->ctx[idx].vlan_macip_lens >> IGB_TX_FLAGS_VLAN_SHIFT, @@ -675,7 +677,9 @@ igb_process_tx_desc(IGBCore *core, tx->first =3D true; tx->skip_cp =3D false; net_tx_pkt_reset(tx->tx_pkt, net_tx_pkt_unmap_frag_pci, dev); + return total_len; } + return 0; } =20 static uint32_t igb_tx_wb_eic(IGBCore *core, int queue_idx) --=20 2.54.0.1136.gdb2ca164c4-goog From nobody Sun Jul 26 13:27:01 2026 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=reject dis=none) header.from=google.com ARC-Seal: i=1; a=rsa-sha256; t=1781222612; cv=none; d=zohomail.com; s=zohoarc; b=d+54cOkpwCAu3p9eyiZNDgmXEb4NvYYykkL1wXHSse27nmbBgQsENJ4IJj6kTNIZItgHf8OSPPhmAPWOsyazyajYs6665HPFiBs2m9izxh+6kd0AxciHRbKylC9wv7vVksyggCehxI6476YVgKBh+JGfo41/q7AinAaYmjC+a9o= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1781222612; h=Content-Type:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=i0jE0keB8XW4szM5K0FFyAJRk1NjD4A7UVCq1UseOTs=; b=mj/UeTUqDr3uIjiHPQrAWXBcGNV3Fj5k8nx8olYOhhjzdKksp1kyaPhgPUxA7CJ9JMMX0F4M2qQ7NuDaBm7KRd1FDoW+ClSBI8FNP5FsJHb9hHpvm4cDhGs1k6DJCnywko1L4xD+xmbIMC9eYPLSbA8oY+NBLm/S9PIMFsfnlSw= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=reject dis=none) Return-Path: Received: from lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1781222612951743.9694726860063; Thu, 11 Jun 2026 17:03:32 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wXpLt-0002Ba-RJ; Thu, 11 Jun 2026 20:02:25 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from <3zyQragcKCh4DLBCFE8AIIAF8.6IGK8GO-78P8FHIHAHO.ILA@flex--jrhilke.bounces.google.com>) id 1wXmho-0000zg-RI for qemu-devel@nongnu.org; Thu, 11 Jun 2026 17:12:53 -0400 Received: from mail-pf1-x449.google.com ([2607:f8b0:4864:20::449]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from <3zyQragcKCh4DLBCFE8AIIAF8.6IGK8GO-78P8FHIHAHO.ILA@flex--jrhilke.bounces.google.com>) id 1wXmhn-0003oc-50 for qemu-devel@nongnu.org; Thu, 11 Jun 2026 17:12:52 -0400 Received: by mail-pf1-x449.google.com with SMTP id d2e1a72fcca58-842692bf60aso369220b3a.1 for ; Thu, 11 Jun 2026 14:12:48 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20251104; t=1781212368; x=1781817168; darn=nongnu.org; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:from:to:cc:subject:date:message-id:reply-to; bh=i0jE0keB8XW4szM5K0FFyAJRk1NjD4A7UVCq1UseOTs=; b=jOuGvqYxjyFnKnopWBDwX9ZlkBpU9E869/V/sOxJ66MM3Tpq030HEc8hDtmVNhrgih rBCnksd4QvBUK/jYjzZTka61RozM6zItnWzZTJy+S9RKSiGOObLiT5mRm1Ugb5QANr9L PURGbh6SSHKoNEGdm/LkzCx+8A4HEmJv9P27Bk8D4NzDP5cUiB5MFYhyZUXyg5stR5D1 CldavtgS2FxUyuGmVAMQw4edOuwOh8Adhsz/lEyHgq+An5muDbOsL4bm5pPB4z0/Tbho Rx0iBpyqDad2jsslHpbRk8zsgaK8bt8bOvOvdmr/7NnZYq9LJSoAPoFhCRPwHQo3EH7F YW8w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1781212368; x=1781817168; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=i0jE0keB8XW4szM5K0FFyAJRk1NjD4A7UVCq1UseOTs=; b=fRo58bIL0olE4zB/VleE3ivl5Xa2FdlLm7wgyGoLwE2EcV0NBiNJKpnZSRHwOW8kS4 /D230WIIsva53AP/DY1KNj78FtohyI422msuEs4arLC2QK7vTKc6dgitVdZwEkHD2CjV K6mKtDubY6bSBLDY0HBIkJqmsHiz4zJ5I3W0uZXWZbUfdAqu/ow3nlkzFGsPBphnhrx5 skLZzx2nrjGM0rbrd8qKO2Ot/PD/tMG8QgO0f9n9YnDPYbK6vUl03XWSvYrOmnxQzx5G PgAk+h+MxuVmuK/q8sdpy8RfHoqqMeFXVZTHU2gDYYLnHBSHZMjBX3r2kUVjn5c5rmHA tDUg== X-Forwarded-Encrypted: i=1; AFNElJ9Ot1Dox67SUXxgLsNoVWDoUeVyBa0+mSJ84SGRLPsUQKPKbxzgi/kZ8F6BLEuN3oQX/peJ7G/FzATN@nongnu.org X-Gm-Message-State: AOJu0Yzk45Dv12MvouUmUtG2WDlFh3/sdj7X63YgWcuaPW6/1CqJOyVZ CrZlkeYRKpNArFIwWfTMUp9e5MB6c1dXpWcQEdWvKfpFxaCrfO+hLOSbtOsVKiNM6rtp4YflPxi wqM/6r8Ph X-Received: from pfbem2.prod.google.com ([2002:a05:6a00:3742:b0:842:1c68:3772]) (user=jrhilke job=prod-delivery.src-stubby-dispatcher) by 2002:a05:6a00:2d17:b0:842:5a8d:303a with SMTP id d2e1a72fcca58-84336bb517fmr4844323b3a.37.1781212367843; Thu, 11 Jun 2026 14:12:47 -0700 (PDT) Date: Thu, 11 Jun 2026 21:11:30 +0000 In-Reply-To: <20260611-igb-trl-v2-0-bd58de9eb0fa@google.com> Mime-Version: 1.0 References: <20260611-igb-trl-v2-0-bd58de9eb0fa@google.com> X-Mailer: b4 0.14.3 Message-ID: <20260611-igb-trl-v2-5-bd58de9eb0fa@google.com> Subject: [PATCH v2 5/7] igb: Implement TRL throttling and timer resumption From: Josh Hilke To: Akihiko Odaki , qemu-devel@nongnu.org Cc: Josh Hilke , Sriram Yagnaraman , Jason Wang , Fabiano Rosas , Laurent Vivier , Paolo Bonzini , David Matlack , Alex Williamson Content-Type: text/plain; charset="utf-8" Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists1p.gnu.org; Received-SPF: pass client-ip=2607:f8b0:4864:20::449; envelope-from=3zyQragcKCh4DLBCFE8AIIAF8.6IGK8GO-78P8FHIHAHO.ILA@flex--jrhilke.bounces.google.com; helo=mail-pf1-x449.google.com X-Spam_score_int: -95 X-Spam_score: -9.6 X-Spam_bar: --------- X-Spam_report: (-9.6 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_MED=-0.001, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001, USER_IN_DEF_DKIM_WL=-7.5 autolearn=ham autolearn_force=no X-Spam_action: no action X-Mailman-Approved-At: Thu, 11 Jun 2026 20:02:23 -0400 X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: qemu development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @google.com) X-ZM-MESSAGEID: 1781222615372158500 Content-Transfer-Encoding: quoted-printable Integrate throttling logic into the transmission path. In `igb_start_xmit`, check if the queue is currently throttled. Accumulate bytes sent, calculate the transmission delay based on the configured target rate, and if a throttle is triggered, set the virtual timer, mark the queue as throttled, and defer remaining packets. Implement the timer callback to clear the throttled state and resume transmission when the timer expires. Signed-off-by: Josh Hilke --- hw/net/igb_core.c | 34 ++++++++++++++++++++++++++++++++-- 1 file changed, 32 insertions(+), 2 deletions(-) diff --git a/hw/net/igb_core.c b/hw/net/igb_core.c index 1c05276..c8e8e2d 100644 --- a/hw/net/igb_core.c +++ b/hw/net/igb_core.c @@ -875,6 +875,14 @@ igb_tx_enabled(IGBCore *core, const E1000ERingInfo *tx= i) (core->mac[TXDCTL0 + (qn * 16)] & E1000_TXDCTL_QUEUE_ENABLE); } =20 +static uint64_t igb_trl_calculate_delay(IGBCore *core, int qidx, + size_t bytes_sent) +{ + uint64_t ns_per_sec =3D 1000000000ULL; + + return (uint64_t)bytes_sent * ns_per_sec / core->trl[qidx].target_rate; +} + static void igb_start_xmit(IGBCore *core, const IGB_TxRing *txr) { @@ -883,17 +891,23 @@ igb_start_xmit(IGBCore *core, const IGB_TxRing *txr) union e1000_adv_tx_desc desc; const E1000ERingInfo *txi =3D txr->i; uint32_t eic =3D 0; + size_t bytes_sent; =20 if (!igb_tx_enabled(core, txi)) { trace_e1000e_tx_disabled(); return; } =20 + if (timer_pending(core->trl[txi->idx].timer)) { + return; + } + d =3D pcie_sriov_get_vf_at_index(core->owner, txi->idx % 8); if (!d) { d =3D core->owner; } =20 + bytes_sent =3D 0; while (!igb_ring_empty(core, txi)) { base =3D igb_ring_head_descr(core, txi); =20 @@ -902,9 +916,19 @@ igb_start_xmit(IGBCore *core, const IGB_TxRing *txr) trace_e1000e_tx_descr((void *)(intptr_t)desc.read.buffer_addr, desc.read.cmd_type_len, desc.wb.status); =20 - igb_process_tx_desc(core, d, txr->tx, &desc, txi->idx); + bytes_sent +=3D igb_process_tx_desc(core, d, txr->tx, &desc, txi->= idx); igb_ring_advance(core, txi, 1); eic |=3D igb_txdesc_writeback(core, base, &desc, txi); + + if (core->trl[txi->idx].target_rate > 0) { + uint64_t delay_ns =3D + igb_trl_calculate_delay(core, txi->idx, bytes_sent); + if (delay_ns > 0) { + timer_mod(core->trl[txi->idx].timer, + qemu_clock_get_ns(QEMU_CLOCK_VIRTUAL) + delay_ns= ); + break; + } + } } =20 if (eic) { @@ -4365,7 +4389,13 @@ igb_autoneg_resume(IGBCore *core) =20 static void igb_trl_timer_cb(void *opaque) { - /* Stub */ + IGBTrlQueue *trl =3D opaque; + IGBCore *core =3D trl->core; + int qidx =3D trl->queue_idx; + IGB_TxRing txr; + + igb_tx_ring_init(core, &txr, qidx); + igb_start_xmit(core, &txr); } =20 void --=20 2.54.0.1136.gdb2ca164c4-goog From nobody Sun Jul 26 13:27:01 2026 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=reject dis=none) header.from=google.com ARC-Seal: i=1; a=rsa-sha256; t=1781222617; cv=none; d=zohomail.com; s=zohoarc; b=LsB0i3z+XC45etBcjmMo2aBrEW43c+5ECKsTMTiCaOIJyDxxLmR66aSmG/y4WqQH9vIselWUL4JP7vLO6tphrGVXLBKeJgPJrdMcgaaxL8s6ATuweTkFin1Wrieky8JcCDpCEAVJrZkaRaYlNkLBsa6UITWvKjlsIJ8H5ydx1WA= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1781222617; h=Content-Type:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=vT+G6PpVv3/b6AactbiPBfLDgfqkldAmvTCmGPSl+Vg=; b=eW+iV4Mu/uioso/kKe21GERYss+qkXhTd1z+gt9fXhObxiR0NCmSr2mdGEi9zjUHQ5Egg2de2dqKcXyIfLfV4yseXq3hyG9Zg78hfGl94BCS+durVh3QC1ZmJtewQFDJFASqvuv2HE28mhNp28q8QkxWZOFO/VgPcmGjhFXzEj4= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=reject dis=none) Return-Path: Received: from lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1781222617732803.9420293163671; Thu, 11 Jun 2026 17:03:37 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wXpLt-0002B4-3E; Thu, 11 Jun 2026 20:02:25 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from <30iQragcKCiEGOEFIHBDLLDIB.9LJNBJR-ABSBIKLKDKR.LOD@flex--jrhilke.bounces.google.com>) id 1wXmhs-000106-9n for qemu-devel@nongnu.org; Thu, 11 Jun 2026 17:12:58 -0400 Received: from mail-pf1-x44a.google.com ([2607:f8b0:4864:20::44a]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from <30iQragcKCiEGOEFIHBDLLDIB.9LJNBJR-ABSBIKLKDKR.LOD@flex--jrhilke.bounces.google.com>) id 1wXmhq-0003vw-FS for qemu-devel@nongnu.org; Thu, 11 Jun 2026 17:12:55 -0400 Received: by mail-pf1-x44a.google.com with SMTP id d2e1a72fcca58-8423770d72dso361269b3a.3 for ; Thu, 11 Jun 2026 14:12:52 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20251104; t=1781212371; x=1781817171; darn=nongnu.org; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:from:to:cc:subject:date:message-id:reply-to; bh=vT+G6PpVv3/b6AactbiPBfLDgfqkldAmvTCmGPSl+Vg=; b=Bjx/sjt9U/V6Yz3zR5ibk9XZ/3cZ6D2m7HEc+e6pFKdoXjDLWQ4ADvYwDORSpna2xt iaTizK6EGfr6ntXeK5brMCuMXClFXDKhQ8rQED0/P2j2vcIyKcxOp09squPxW/XrF17F zpWWTYj9Jj34z3oPDUjOTb2RrXYKTScy2SaQUeUFynDO7fm+J0LV92yTEytSKTuz5z79 GeCOwua1eeVxz95zLfKpxy2jGnyg1IP4kzDuhFgQ1ZVMuQcMhpEHt2Bq/NJOrGi+XagV WbaRWjD41IjAEQMWHsO93FuFFR6fdM8Bd5gWx4bkrxExSCKzG2Y3/AD23f1KCVMbnZ/j 3Chw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1781212371; x=1781817171; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=vT+G6PpVv3/b6AactbiPBfLDgfqkldAmvTCmGPSl+Vg=; b=j75PGdYsrqDahwbsNRYw21tWnQd8iXKIYm/a+8+WYG0qQWb9inRMMaVFq7z/lwMa09 3QXA8lPpS+8s8mKrvNso6fUuuh5GQ7rutTWGDLZ+NQxXbeUDHyFSTsuefcYySyBzdQ6h oBa3anDsbQDKYuaPuKCEnjcYnNBNgiBoysgoQB77Xx9WCN8SrOuiS/R0smL8REadIu8o hLQKeBwXW2WFtYLXa6A/LcuJta+9vqM3RFfMfbdhpOd8NQH7zvlWircOGSxQTKYzhmjH lxaBhCMD97J2VP8jTLQQHrb/g9OZXkUSSDBbNOQY3TvDmgZzQedenL/0MeLSgr3jPMnl K1eQ== X-Forwarded-Encrypted: i=1; AFNElJ8fij8z2rNAnV3P/ZeMnYmM36hzrHOwRwyjKQC8opw9d2YvFLbv25AbmpiuDjdAEZj86h6y9RKiSJFd@nongnu.org X-Gm-Message-State: AOJu0Yzh4oiKEuKg6moeeka69W5PDp4++InxkIk5hS36zE3cW7bEXV+B s/JXLbTn70EocMc5mEj870pYBjgtU+k2t3+EjmPe9fSxsyBsNzQeMOu2q1UQD7JmkCYO74Q+gZs tHRtolxtE X-Received: from pfbho5.prod.google.com ([2002:a05:6a00:8805:b0:835:2a09:221c]) (user=jrhilke job=prod-delivery.src-stubby-dispatcher) by 2002:a05:6a00:4512:b0:82c:b808:4c59 with SMTP id d2e1a72fcca58-84336bde6aamr5245505b3a.46.1781212370541; Thu, 11 Jun 2026 14:12:50 -0700 (PDT) Date: Thu, 11 Jun 2026 21:11:31 +0000 In-Reply-To: <20260611-igb-trl-v2-0-bd58de9eb0fa@google.com> Mime-Version: 1.0 References: <20260611-igb-trl-v2-0-bd58de9eb0fa@google.com> X-Mailer: b4 0.14.3 Message-ID: <20260611-igb-trl-v2-6-bd58de9eb0fa@google.com> Subject: [PATCH v2 6/7] igb: Add QTest for Transmit Rate Limiter register multiplexing From: Josh Hilke To: Akihiko Odaki , qemu-devel@nongnu.org Cc: Josh Hilke , Sriram Yagnaraman , Jason Wang , Fabiano Rosas , Laurent Vivier , Paolo Bonzini , David Matlack , Alex Williamson Content-Type: text/plain; charset="utf-8" Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists1p.gnu.org; Received-SPF: pass client-ip=2607:f8b0:4864:20::44a; envelope-from=30iQragcKCiEGOEFIHBDLLDIB.9LJNBJR-ABSBIKLKDKR.LOD@flex--jrhilke.bounces.google.com; helo=mail-pf1-x44a.google.com X-Spam_score_int: -95 X-Spam_score: -9.6 X-Spam_bar: --------- X-Spam_report: (-9.6 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_MED=-0.001, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001, USER_IN_DEF_DKIM_WL=-7.5 autolearn=ham autolearn_force=no X-Spam_action: no action X-Mailman-Approved-At: Thu, 11 Jun 2026 20:02:23 -0400 X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: qemu development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @google.com) X-ZM-MESSAGEID: 1781222618952158500 Content-Transfer-Encoding: quoted-printable Add a unit test to verify register writes/reads to the rate limit register (TRLC) return the correct value based on which queue is currently selected in the queue selection register (TRLDQSEL). Signed-off-by: Josh Hilke --- tests/qtest/igb-test.c | 51 ++++++++++++++++++++++++++++++++++++++++++++++= ++++ 1 file changed, 51 insertions(+) diff --git a/tests/qtest/igb-test.c b/tests/qtest/igb-test.c index 3d397ea..119be6a 100644 --- a/tests/qtest/igb-test.c +++ b/tests/qtest/igb-test.c @@ -45,6 +45,20 @@ static const struct eth_header packet =3D { .h_source =3D E1000E_ADDRESS, }; =20 +/* + * Calculate TRL rate factor for a given target rate. + * + * Rate Factor =3D 1 Gbps / Target Rate. + * + * The hardware TRLRC register stores the rate factor as a fixed-point num= ber + * with 14 fractional bits. Scale 1Gbps by 2^14 before dividing to preserve + * precision in integer arithmetic. + */ +static uint32_t igb_trl_get_rate_factor(uint64_t rate_bytes_s) +{ + return (E1000_LINK_RATE_1GBPS << 14) / rate_bytes_s; +} + static void igb_send_verify(QE1000E *d, int *test_sockets, QGuestAllocator= *alloc) { union e1000_adv_tx_desc descr; @@ -191,6 +205,41 @@ static void test_igb_multiple_transfers(void *obj, voi= d *data, =20 } =20 +/* + * Verify the rate limit value register (TRLC) returns the correct value b= ased + * on which queue is selected (TRLDQSEL). + */ +static void test_igb_transmit_rate_limiter_regs(void *obj, void *data, + QGuestAllocator *alloc) +{ + QOSGraphObject *e_object =3D obj; + QE1000E_PCI *e1000e =3D obj; + QPCIDevice *dev =3D e_object->get_driver(e_object, "pci-device"); + QE1000E *d =3D &e1000e->e1000e; + const int qidx0 =3D 0, qidx1 =3D 1; + uint32_t val0, val1; + + if (qpci_check_buggy_msi(dev)) { + return; + } + + e1000e_macreg_write(d, E1000_TRLDQSEL, qidx0); + val0 =3D E1000_TRLRC_RS_ENA | + igb_trl_get_rate_factor(E1000_LINK_RATE_1GBPS / 1000); + e1000e_macreg_write(d, E1000_TRLRC, val0); + + e1000e_macreg_write(d, E1000_TRLDQSEL, qidx1); + val1 =3D E1000_TRLRC_RS_ENA | + igb_trl_get_rate_factor(E1000_LINK_RATE_1GBPS / 500); + e1000e_macreg_write(d, E1000_TRLRC, val1); + + e1000e_macreg_write(d, E1000_TRLDQSEL, qidx0); + g_assert_cmphex(e1000e_macreg_read(d, E1000_TRLRC), =3D=3D, val0); + + e1000e_macreg_write(d, E1000_TRLDQSEL, qidx1); + g_assert_cmphex(e1000e_macreg_read(d, E1000_TRLRC), =3D=3D, val1); +} + static void data_test_clear(void *sockets) { int *test_sockets =3D sockets; @@ -247,6 +296,8 @@ static void register_igb_test(void) qos_add_test("rx", "igb", test_igb_rx, &opts); qos_add_test("multiple_transfers", "igb", test_igb_multiple_transfers, &opts); + qos_add_test("transmit_rate_limiter_regs", "igb", + test_igb_transmit_rate_limiter_regs, &opts); #endif =20 opts.before =3D data_test_init_no_socket; --=20 2.54.0.1136.gdb2ca164c4-goog From nobody Sun Jul 26 13:27:01 2026 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=reject dis=none) header.from=google.com ARC-Seal: i=1; a=rsa-sha256; t=1781222623; cv=none; d=zohomail.com; s=zohoarc; b=mWJl2omiefwD5M6Oy5p2j0k1zRVx6bZ1QzqGbcQbGNRx9blOGWNJH4WziOEeiu5dpv1jA/rGkyxrh+1vOx4w1Ct+2idwXPoTzztxS6CDNGB/DIFS8WDTQAQCdnRBWykzQ97DV/s3bpd2Amh8lrmiI6dPfvcfr08mCinG8om4Pbw= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1781222623; h=Content-Type:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=+O1dHWDOSJ55QHlZapXvR2r6qYGjNQa+WWJ3hC2i0oc=; b=cJajAF3Oqb2ljgJSsi8B9RKyWOhxlTwB2gRcra/iXcmilNAS1AM1t5paXFPyp0krBd201obORSwnce65FT1qCpeV3AP30je7b1QyrZReCcqAzRHSQC5v2CPZqQHN59gTmQJISygoheFIkhE8BkaEz/maLVf4jaOdeJ/RooOBVdw= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=reject dis=none) Return-Path: Received: from lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1781222623947337.33900519669794; Thu, 11 Jun 2026 17:03:43 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wXpLx-0002Cx-ST; Thu, 11 Jun 2026 20:02:30 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from <32iQragcKCikOWMNQPJLTTLQJ.HTRVJRZ-IJaJQSTSLSZ.TWL@flex--jrhilke.bounces.google.com>) id 1wXmiD-00010u-83 for qemu-devel@nongnu.org; Thu, 11 Jun 2026 17:13:17 -0400 Received: from mail-pf1-x44a.google.com ([2607:f8b0:4864:20::44a]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from <32iQragcKCikOWMNQPJLTTLQJ.HTRVJRZ-IJaJQSTSLSZ.TWL@flex--jrhilke.bounces.google.com>) id 1wXmi2-00046h-M2 for qemu-devel@nongnu.org; Thu, 11 Jun 2026 17:13:10 -0400 Received: by mail-pf1-x44a.google.com with SMTP id d2e1a72fcca58-84256bee9a9so201251b3a.1 for ; Thu, 11 Jun 2026 14:13:00 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20251104; t=1781212379; x=1781817179; darn=nongnu.org; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:from:to:cc:subject:date:message-id:reply-to; bh=+O1dHWDOSJ55QHlZapXvR2r6qYGjNQa+WWJ3hC2i0oc=; b=SMzJi518ZL0CYWmPHQ7ji+oJy5DOfF7DGv0+xYd6GsfEcQwyYWZZ0svrTZVE+Aw9s4 8LxEidxg2LG3VVDICghMcM6HmPtNt9lHIElw+lNyc1zmB1bvRGGS9fuwofBPCY1qab2K 4/CeeSGChZC8jN2g5KYG/i4q5ZijbN5K6vvW5nKyKYybp8k20s0Ycs+9l+p4zISf/2Bj xkFElYYlTpNnfIxfRvF/kIYtZjYOqcKpV84W/XQqrwZ1RElwhAtKQ/v6WrJW1cIA3LBl FSU+nit/X3SxjoaXkvPEXwsbNPuQuI7Y1gS65AM06SpWpOn+0HRPgRpciSBXuEDLkOb2 e4ww== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1781212379; x=1781817179; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=+O1dHWDOSJ55QHlZapXvR2r6qYGjNQa+WWJ3hC2i0oc=; b=QSp/Vtm7Sh1VYyqrRm0nLWiubqD9PPdFUbJ7fWvTK9Aaak5DzSlGUbiOCLrv3PlCqm wjIirc7E9bT9dX7h4mFL6gcGnr7Dbb4cpppY/3tqiLTvvzdBlDksZVJlfz+/YK66tpBf jQBcDq26CwHB8BjgUAPoJ0bgWVrDrFYlKKQQARCi5Y04r/4DoKruYll4hN+WltJh2wzQ vzAQcEjkkHOXMTyAvy+xsJqY9e8E46ymCY0wXd5D+lhJuJux7dtwraLHYkuGUascQagn UFhWI5p9b0MnGzb6xerbLAKLCCMpwlETyX9BIAnXvvfmO0NQit1SYZBeRd9azV9niwKK /NpQ== X-Forwarded-Encrypted: i=1; AFNElJ/mGNjxg+Vbo1/ABFtVr37HZmtjbmePBFXucihNIsVa5WOV+GuoDHv5wFPseTzBYKpbcKGFC9cz2Tak@nongnu.org X-Gm-Message-State: AOJu0YxlO5dAlWZBPJWVIToFyhDa+jXEIWzFddDBlflfMOvNy5EcecOU zQBxIENO1qou1St7LooxjILKQ344VI+QYhkRDEQ+BDLAZEBJUWlqhwOCFeNjEerWhg1pLqrZLvf qacoLsnAs X-Received: from pfjf5.prod.google.com ([2002:a05:6a00:22c5:b0:842:4720:4013]) (user=jrhilke job=prod-delivery.src-stubby-dispatcher) by 2002:a05:6a00:1f0e:b0:842:74e3:48a9 with SMTP id d2e1a72fcca58-843367ecb27mr4951761b3a.12.1781212378980; Thu, 11 Jun 2026 14:12:58 -0700 (PDT) Date: Thu, 11 Jun 2026 21:11:32 +0000 In-Reply-To: <20260611-igb-trl-v2-0-bd58de9eb0fa@google.com> Mime-Version: 1.0 References: <20260611-igb-trl-v2-0-bd58de9eb0fa@google.com> X-Mailer: b4 0.14.3 Message-ID: <20260611-igb-trl-v2-7-bd58de9eb0fa@google.com> Subject: [PATCH v2 7/7] igb: Add QTest for Transmit Rate Limiter traffic throttling From: Josh Hilke To: Akihiko Odaki , qemu-devel@nongnu.org Cc: Josh Hilke , Sriram Yagnaraman , Jason Wang , Fabiano Rosas , Laurent Vivier , Paolo Bonzini , David Matlack , Alex Williamson Content-Type: text/plain; charset="utf-8" Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists1p.gnu.org; Received-SPF: pass client-ip=2607:f8b0:4864:20::44a; envelope-from=32iQragcKCikOWMNQPJLTTLQJ.HTRVJRZ-IJaJQSTSLSZ.TWL@flex--jrhilke.bounces.google.com; helo=mail-pf1-x44a.google.com X-Spam_score_int: -95 X-Spam_score: -9.6 X-Spam_bar: --------- X-Spam_report: (-9.6 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_MED=-0.001, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001, USER_IN_DEF_DKIM_WL=-7.5 autolearn=ham autolearn_force=no X-Spam_action: no action X-Mailman-Approved-At: Thu, 11 Jun 2026 20:02:23 -0400 X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: qemu development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @google.com) X-ZM-MESSAGEID: 1781222625059158500 Content-Transfer-Encoding: quoted-printable Add a test for the IGB transmit rate limiting functionality. The test verifies that TRL is enabled by setting the appropriate registers and that data is transmitted at the appropriate rate based on chosen target rate. Signed-off-by: Josh Hilke --- tests/qtest/igb-test.c | 158 +++++++++++++++++++++++++++++++++++++++++++++= ++++ 1 file changed, 158 insertions(+) diff --git a/tests/qtest/igb-test.c b/tests/qtest/igb-test.c index 119be6a..153f5fb 100644 --- a/tests/qtest/igb-test.c +++ b/tests/qtest/igb-test.c @@ -34,9 +34,11 @@ #include "qemu/iov.h" #include "qemu/module.h" #include "qemu/bitops.h" +#include "qemu/timer.h" #include "libqos/libqos-malloc.h" #include "libqos/e1000e.h" #include "hw/net/igb_regs.h" +#include "hw/pci/pci_regs.h" =20 #ifndef _WIN32 =20 @@ -59,6 +61,58 @@ static uint32_t igb_trl_get_rate_factor(uint64_t rate_by= tes_s) return (E1000_LINK_RATE_1GBPS << 14) / rate_bytes_s; } =20 +static void igb_trl_enable(QE1000E *d, uint64_t rate_bytes_s) +{ + /* Select Queue 0 */ + e1000e_macreg_write(d, E1000_TRLDQSEL, 0); + /* Enable TRL with target rate */ + e1000e_macreg_write(d, E1000_TRLRC, + E1000_TRLRC_RS_ENA | + igb_trl_get_rate_factor(rate_bytes_s)); +} + +static void igb_trl_disable(QE1000E *d) +{ + /* Select Queue 0 */ + e1000e_macreg_write(d, E1000_TRLDQSEL, 0); + /* Disable TRL */ + e1000e_macreg_write(d, E1000_TRLRC, 0); +} + +static void igb_msix_clear_pending(QPCIDevice *dev, uint16_t entry) +{ + uint64_t vector_offset =3D + dev->msix_table_off + (entry * PCI_MSIX_ENTRY_SIZE); + uint32_t val =3D qpci_io_readl(dev, dev->msix_table_bar, + vector_offset + PCI_MSIX_ENTRY_VECTOR_CTR= L); + + /* Unmask (clears pending bit in QEMU) */ + qpci_io_writel(dev, dev->msix_table_bar, + vector_offset + PCI_MSIX_ENTRY_VECTOR_CTRL, + val & ~PCI_MSIX_ENTRY_CTRL_MASKBIT); + + /* Mask again */ + qpci_io_writel(dev, dev->msix_table_bar, + vector_offset + PCI_MSIX_ENTRY_VECTOR_CTRL, + val | PCI_MSIX_ENTRY_CTRL_MASKBIT); +} + +static void igb_read_tx_tail(QE1000E *d, void *descr) +{ + QE1000E_PCI *d_pci =3D container_of(d, QE1000E_PCI, e1000e); + uint32_t last_entry; + uint32_t tail; + uint32_t len; + + tail =3D e1000e_macreg_read(d, E1000_TDT_A(0)); + len =3D e1000e_macreg_read(d, E1000_TDLEN_A(0)) / E1000_RING_DESC_LEN; + last_entry =3D (tail + len - 1) % len; + + qtest_memread(d_pci->pci_dev.bus->qts, + d->tx_ring + last_entry * E1000_RING_DESC_LEN, descr, + E1000_RING_DESC_LEN); +} + static void igb_send_verify(QE1000E *d, int *test_sockets, QGuestAllocator= *alloc) { union e1000_adv_tx_desc descr; @@ -84,6 +138,14 @@ static void igb_send_verify(QE1000E *d, int *test_socke= ts, QGuestAllocator *allo /* Wait for TX WB interrupt */ e1000e_wait_isr(d, E1000E_TX0_MSG_ID); =20 + /* + * Read the descriptor back from guest memory again, now that WB has + * occurred. This is required because if the packet was delayed by the + * trasmit rate limiter, e1000e_tx_ring_push read it back before QEMU + * actually processed it. + */ + igb_read_tx_tail(d, &descr); + /* Check DD bit */ g_assert_cmphex(le32_to_cpu(descr.wb.status) & E1000_TXD_STAT_DD, =3D= =3D, E1000_TXD_STAT_DD); @@ -147,6 +209,29 @@ static void igb_receive_verify(QE1000E *d, int *test_s= ockets, QGuestAllocator *a guest_free(alloc, data); } =20 +/* Returns the amount of microseconds it takes to transmit a 64-byte packe= t.*/ +static uint64_t igb_send_and_measure(QE1000E *d, int *test_sockets, + QGuestAllocator *alloc) +{ + QE1000E_PCI *d_pci =3D container_of(d, QE1000E_PCI, e1000e); + QPCIDevice *pdev =3D &d_pci->pci_dev; + QTestState *qts =3D global_qtest; + uint64_t start_time, end_time; + + /* Clear any stale pending interrupt for this vector before we start */ + igb_msix_clear_pending(pdev, E1000E_TX0_MSG_ID); + + /* Clear EICR to allow new interrupts to be raised in MSI-X mode */ + e1000e_macreg_write(d, E1000_EICR, 0xFFFFFFFF); + + /* Send a test packet and measure the time it takes. */ + start_time =3D qtest_clock_step(qts, 1); + igb_send_verify(d, test_sockets, alloc); + end_time =3D qtest_clock_step(qts, 1); + + return end_time - start_time; +} + static void test_e1000e_init(void *obj, void *data, QGuestAllocator * allo= c) { /* init does nothing */ @@ -240,6 +325,77 @@ static void test_igb_transmit_rate_limiter_regs(void *= obj, void *data, g_assert_cmphex(e1000e_macreg_read(d, E1000_TRLRC), =3D=3D, val1); } =20 +/* + * Test for Transmit Rate Limiter (TRL) traffic throttling. + * + * Verifies that: + * 1. Packets are transmitted without delay when TRL is disabled. + * 2. Enabling TRL on a queue throttles subsequent transmissions. + * 3. The delay matches the expected transmission time calculated from the + * packet size and the configured target rate. + * 4. Disabling TRL restores normal (unthrottled) transmission behavior. + */ +static void test_igb_transmit_rate_limiter(void *obj, void *data, + QGuestAllocator *alloc) +{ + QOSGraphObject *e_object =3D obj; + QE1000E_PCI *e1000e =3D obj; + QPCIDevice *dev =3D e_object->get_driver(e_object, "pci-device"); + QE1000E *d =3D &e1000e->e1000e; + const uint64_t expected_baseline_elapsed =3D 10 * SCALE_US; + const uint64_t expected_max_elapsed =3D 530 * SCALE_US; + const uint64_t expected_min_elapsed =3D 500 * SCALE_US; + uint64_t elapsed; + + if (qpci_check_buggy_msi(dev)) { + return; + } + + /* Send a test packet to verify there's no rate limit. */ + elapsed =3D igb_send_and_measure(d, data, alloc); + + /* + * QEMU doesn't emulate the hardware line rate of the device, so the p= acket + * is processed instantly (requiring 0 clock steps in wait_isr, which = steps + * by 10us). Give a 10us margin for error. + */ + g_assert_cmpint(elapsed, <, expected_baseline_elapsed); + + /* + * Enable TRL and set the target rate to: + * (E1000_LINK_RATE_1GBPS / 1000) =3D 125 KB/s. + */ + igb_trl_enable(d, E1000_LINK_RATE_1GBPS / 1000); + + /* + * Send Packet 1 (no delay) + * The first packet triggers rate limiting for subsequent transmission= s. + */ + elapsed =3D igb_send_and_measure(d, data, alloc); + g_assert_cmpint(elapsed, <, expected_baseline_elapsed); + + /* Send Packet 2 (should be delayed) */ + elapsed =3D igb_send_and_measure(d, data, alloc); + /* + * Expected delay: 64 byte packet / 125 KB/s =3D 512 us. + * Since QEMU steps the clock by 10 us on each wait_isr iteration, + * the delay is rounded up to the next 10 us step, which is 520 us. + */ + g_assert_cmpint(elapsed, >=3D, expected_min_elapsed); + g_assert_cmpint(elapsed, <=3D, expected_max_elapsed); + + /* Send Packet 3 (should also be delayed) */ + elapsed =3D igb_send_and_measure(d, data, alloc); + g_assert_cmpint(elapsed, >=3D, expected_min_elapsed); + g_assert_cmpint(elapsed, <=3D, expected_max_elapsed); + + igb_trl_disable(d); + + /* Send Packet 4 (no delay since TRL is disabled) */ + elapsed =3D igb_send_and_measure(d, data, alloc); + g_assert_cmpint(elapsed, <, expected_baseline_elapsed); +} + static void data_test_clear(void *sockets) { int *test_sockets =3D sockets; @@ -298,6 +454,8 @@ static void register_igb_test(void) test_igb_multiple_transfers, &opts); qos_add_test("transmit_rate_limiter_regs", "igb", test_igb_transmit_rate_limiter_regs, &opts); + qos_add_test("transmit_rate_limiter", "igb", + test_igb_transmit_rate_limiter, &opts); #endif =20 opts.before =3D data_test_init_no_socket; --=20 2.54.0.1136.gdb2ca164c4-goog