From patchwork Fri Apr 11 04:31:21 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Nicholas Piggin X-Patchwork-Id: 14047538 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id 6B608C369A8 for ; Fri, 11 Apr 2025 04:32:54 +0000 (UTC) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1u363P-0004gY-AS; Fri, 11 Apr 2025 00:31:47 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1u363N-0004c8-Se for qemu-devel@nongnu.org; Fri, 11 Apr 2025 00:31:45 -0400 Received: from mail-pl1-x62d.google.com ([2607:f8b0:4864:20::62d]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1u363M-0007Vb-5a for qemu-devel@nongnu.org; Fri, 11 Apr 2025 00:31:45 -0400 Received: by mail-pl1-x62d.google.com with SMTP id d9443c01a7336-227a8cdd241so18848085ad.3 for ; Thu, 10 Apr 2025 21:31:43 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1744345903; x=1744950703; darn=nongnu.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=GRZOC2tSqmQDMujWz+eg0jjAA3OFDUOED5xf58eJ/zc=; b=ia5Rn2c4MWihENVRl0Bc2Jh1EbjF2m737Z8/8IasW9lJ8xGsdHQLTiX17L7xJH+ri3 0/PdSe7E4hwMqXMvhRXwQcgpO2tHQreq2GHw5KlA3UIBSIys/MKPvWKSComjufHy/6lR Keff+OHew+V/WN5jKyHLg4Z16Fut1cIaEZbGiAnv5JimvwbkgYSG1YTQRemgWCAMsOUZ NcVRPiwv1TIHUGHxu9/gYizsbavt2BEqDcvkXH9jqiXRip5v9M6WlVIhNqJNcza0qpjM ZDsr1OLAicwMheFVMW3ageaW/DeRrI091PiuUgnX3GHorq+AF4ZppOat3uncIkCeTRXo KB3Q== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1744345903; x=1744950703; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=GRZOC2tSqmQDMujWz+eg0jjAA3OFDUOED5xf58eJ/zc=; b=wlq3yJKzDfvqoz7/6T9K0gUsk3rxwleDVA8G1jzw6mocNsfP/59iO2l/VhNfZXDNIV 1Trqk5mnjfJaDvTBxJWKmrBr+CQVoKwCr20YAIifsd8sJu6jV1jph7yw5xEMrOAagUJE Fo2tpMN4gKmDX4ArLTwO46ricfzC3PEpvSBAphWyEPsn+b43yJMGmiDdHFel3J8GA02O uPs0cxSRcgApL0LP1aRtTSdrK7wgWeXQIWkynX/NripVMdw96f1Mn/d5v+qwR7HyiUKB 9rHDrwwQ5YFW7jDZj0eU6ETQNQeVA+8SpzN3odaqhtTS7XZsCRdxrG5i2+PUU5NrMIT3 DeVw== X-Forwarded-Encrypted: i=1; AJvYcCVoFTvoixQsnQQiEb01t1rd1oxMfptmrRhCUyIhTvH9VgT4wbod749HBQM3BjuvqdWcYH6d0cxnomcC@nongnu.org X-Gm-Message-State: AOJu0YwouMHMOVbL/fVdkyBt1EWwX4lE32sKhXKvr6kv8vPzlsLcGYSi n8zTHji2hYqZkd9G0uErPBibdWigrQdu2vESDncjibF8CJRpOD1w X-Gm-Gg: ASbGncsxd05K5nh6coGIHn5ki1CaoxzQfluiuFrFOo1IEkqylMgrt5De7RS1ADRgOk2 EkzUH40r5Fq5dUXN+A98QT6z1wmIY+0DxvpyyFew2v2CHCMPlHdk71HKhTvnytEchRstQ4ZUYK+ cLwQfl0dTwRomG2AL6ktbi0Zpm5AF4LHOU3xTHf4mHWXhARamyUYvN4xJ9YCvMSIx55eX+Ijq4e ow/W/tn3pzAaBeCMh/L4iJEepxXnGppVLDb9qeP0rLLSonuH8vlW12znWRXltdraLyG72TYH32/ +VisVsuL0OmRJWG0r/WxDmKQ3yL85EQnSk64CF9UvpM1 X-Google-Smtp-Source: AGHT+IGW1SClwUYPaaFK53VuXDMjMaIHkjVB5P0LSj7LWWBcyTDTv1JPd0EizIhD1djdZ2Cfjrp+/w== X-Received: by 2002:a17:902:f710:b0:224:1935:d9a3 with SMTP id d9443c01a7336-22bea4aba6amr18988835ad.21.1744345902590; Thu, 10 Apr 2025 21:31:42 -0700 (PDT) Received: from wheely.local0.net ([220.253.99.94]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-22ac7b64906sm39361625ad.48.2025.04.10.21.31.38 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 10 Apr 2025 21:31:42 -0700 (PDT) From: Nicholas Piggin To: Akihiko Odaki Cc: Nicholas Piggin , qemu-devel@nongnu.org, Dmitry Fleytman , Jason Wang , Sriram Yagnaraman , Fabiano Rosas , Laurent Vivier , Paolo Bonzini , "Michael S. Tsirkin" , Marcel Apfelbaum Subject: [PATCH v2 1/8] qtest/e1000e|igb: Clear interrupt-cause and msix pending bits after irq Date: Fri, 11 Apr 2025 14:31:21 +1000 Message-ID: <20250411043128.201289-2-npiggin@gmail.com> X-Mailer: git-send-email 2.47.1 In-Reply-To: <20250411043128.201289-1-npiggin@gmail.com> References: <20250411043128.201289-1-npiggin@gmail.com> MIME-Version: 1.0 Received-SPF: pass client-ip=2607:f8b0:4864:20::62d; envelope-from=npiggin@gmail.com; helo=mail-pl1-x62d.google.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, FREEMAIL_FROM=0.001, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+qemu-devel=archiver.kernel.org@nongnu.org Sender: qemu-devel-bounces+qemu-devel=archiver.kernel.org@nongnu.org The e1000e and igb tests do not clear the ICR/EICR cause bits (or set auto-clear) on seeing queue interrupts, which inhibits the triggering of a new interrupt. The msix pending bit which is used to test for the interrupt is also not cleared (the vector is masked). Fix this by clearing the ICR/EICR cause bits, and the msix pending bit using the PBACLR device register. Cc: Michael S. Tsirkin Cc: Marcel Apfelbaum Cc: Dmitry Fleytman Cc: Akihiko Odaki Cc: Sriram Yagnaraman Signed-off-by: Nicholas Piggin --- tests/qtest/e1000e-test.c | 9 ++++++++- tests/qtest/igb-test.c | 8 ++++++++ 2 files changed, 16 insertions(+), 1 deletion(-) diff --git a/tests/qtest/e1000e-test.c b/tests/qtest/e1000e-test.c index de9738fdb74..746d26cfb67 100644 --- a/tests/qtest/e1000e-test.c +++ b/tests/qtest/e1000e-test.c @@ -66,6 +66,10 @@ static void e1000e_send_verify(QE1000E *d, int *test_sockets, QGuestAllocator *a /* Wait for TX WB interrupt */ e1000e_wait_isr(d, E1000E_TX0_MSG_ID); + /* Read ICR to make it ready for next interrupt, assert TXQ0 cause */ + g_assert(e1000e_macreg_read(d, E1000_ICR) & E1000_ICR_TXQ0); + /* Write PBACLR to clear the MSIX pending bit */ + e1000e_macreg_write(d, E1000_PBACLR, (1 << E1000E_TX0_MSG_ID)); /* Check DD bit */ g_assert_cmphex(le32_to_cpu(descr.upper.data) & E1000_TXD_STAT_DD, ==, @@ -117,7 +121,10 @@ static void e1000e_receive_verify(QE1000E *d, int *test_sockets, QGuestAllocator /* Wait for TX WB interrupt */ e1000e_wait_isr(d, E1000E_RX0_MSG_ID); - + /* Read ICR to make it ready for next interrupt, assert RXQ0 cause */ + g_assert(e1000e_macreg_read(d, E1000_ICR) & E1000_ICR_RXQ0); + /* Write PBACLR to clear the MSIX pending bit */ + e1000e_macreg_write(d, E1000_PBACLR, (1 << E1000E_RX0_MSG_ID)); /* Check DD bit */ g_assert_cmphex(le32_to_cpu(descr.wb.upper.status_error) & E1000_RXD_STAT_DD, ==, E1000_RXD_STAT_DD); diff --git a/tests/qtest/igb-test.c b/tests/qtest/igb-test.c index 3d397ea6973..cf8b4131cf2 100644 --- a/tests/qtest/igb-test.c +++ b/tests/qtest/igb-test.c @@ -69,6 +69,10 @@ static void igb_send_verify(QE1000E *d, int *test_sockets, QGuestAllocator *allo /* Wait for TX WB interrupt */ e1000e_wait_isr(d, E1000E_TX0_MSG_ID); + /* Read EICR which clears it ready for next interrupt, assert TXQ0 cause */ + g_assert(e1000e_macreg_read(d, E1000_EICR) & (1 << E1000E_TX0_MSG_ID)); + /* Write PBACLR to clear the MSIX pending bit */ + e1000e_macreg_write(d, E1000_PBACLR, (1 << E1000E_TX0_MSG_ID)); /* Check DD bit */ g_assert_cmphex(le32_to_cpu(descr.wb.status) & E1000_TXD_STAT_DD, ==, @@ -120,6 +124,10 @@ static void igb_receive_verify(QE1000E *d, int *test_sockets, QGuestAllocator *a /* Wait for TX WB interrupt */ e1000e_wait_isr(d, E1000E_RX0_MSG_ID); + /* Read EICR which clears it ready for next interrupt, assert RXQ0 cause */ + g_assert(e1000e_macreg_read(d, E1000_EICR) & (1 << E1000E_RX0_MSG_ID)); + /* Write PBACLR to clear the MSIX pending bit */ + e1000e_macreg_write(d, E1000_PBACLR, (1 << E1000E_RX0_MSG_ID)); /* Check DD bit */ g_assert_cmphex(le32_to_cpu(descr.wb.upper.status_error) & From patchwork Fri Apr 11 04:31:22 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Nicholas Piggin X-Patchwork-Id: 14047536 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id 1D269C36010 for ; Fri, 11 Apr 2025 04:32:37 +0000 (UTC) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1u363T-0004hE-F9; Fri, 11 Apr 2025 00:31:51 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1u363R-0004gq-RR for qemu-devel@nongnu.org; Fri, 11 Apr 2025 00:31:49 -0400 Received: from mail-pl1-x631.google.com ([2607:f8b0:4864:20::631]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1u363Q-0007WT-69 for qemu-devel@nongnu.org; Fri, 11 Apr 2025 00:31:49 -0400 Received: by mail-pl1-x631.google.com with SMTP id d9443c01a7336-227b650504fso15128795ad.0 for ; Thu, 10 Apr 2025 21:31:47 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1744345907; x=1744950707; darn=nongnu.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=y4nGvPDfisSj/GZ4L69AKp/Fu/wL8ilfAEpfXHq2Joo=; b=aOkXwHu2ulXfTwwWilpv8B+UL2wZgxmu/BZTiwLltFJjSXDMqrE0/BhV2ptLGmBecu XCe8Eeq4zc4l/sFsW0vA32t/AJrruCX7ziVRFtjS26QtEziK/tf5VuF85AONlg0oJ3em voP6gEgPefpAOlDjjwr/vu0Kx5IaMlRG0HRs/7px1lVGCzIKNjEayJXGiTGv+1ci4yhH m7eWmKKhoH7riHR7/+HMu0Y7+ck0qyUMLDDg+Qw4xgBaTqBfjXn1FNUBoAj2GblgZtvY YjyMRBiYTm67CsR29pV7CA7K+5JIG/nD4sa/DGWGE65lijsVtg4Kmvk283s+Cb/p1+am SALw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1744345907; x=1744950707; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=y4nGvPDfisSj/GZ4L69AKp/Fu/wL8ilfAEpfXHq2Joo=; b=ka3NPBWkV4lbyMlhryp69F5X+s0ca9vCq8nPToTuEkc4GDEToQhy7Z3cwtjLsAlP0W Qswf1NDRjnWBEKIVxmLZp3ADTSljABwDxrYFRrrRzifqIJOx8UIhJfb5rlPHpq3qebw1 cT4UyRQ8g4pu5RwPV8qkTo9Zq9luYhw4d4cQdN2KuwAIQIRGqfEF8sD3lgzTnyLs9M/3 1gc+zVkZq+E0Q2SmZ1cVLW+vI0RY1ug+j+g1UJFkj0kUOZh0uyFiMcTz6xPAc5zIWrYO 3uwIsucP+Wl2ZGgMjGflEiulORzLfumC/To8NkW7ES1nX73zlrvFI+fSJCio2GS3AmZn 3iVA== X-Forwarded-Encrypted: i=1; AJvYcCU8uZhHJCkOzEQs+c04CShLbRjBKM+TzXKuC/v2M9v5c/V4rGzlQEfrizJC8AMTdDoQ5x02KwOTvHGM@nongnu.org X-Gm-Message-State: AOJu0YxKeXI2Mc9aGNRVLUhCFK3JhTAFl6X+S1UvfGBp1PWbWsc/FXJv 9YMJ3Sz7ESVxzGE6qAgqCY/Lj/xOfG3gsAKAbzWTp/oOEooRrrYE X-Gm-Gg: ASbGnctmFM33mXNONRMy8NRxFnfp4ptMjqTGhrWnB+q4QitTsr90DluduLvut6ZRofj 4bY5JWZKU5MeCoc9vBlOs65OADpWI0YGi9SeMiz9C5J9NAeZ8DaLM+6v/+aeSFb+GvJ5ZWtYJzk cxg98JpAUXk12UQRsMpoBN+laIVg7efPhufT27lRUQ1bJUJJUUwuIHpozG+fXtR9oFMLhwWN86x mPNEPE0+V6Rj1Mim9qU2Isu/l0rDLQNUcwP9GalVz9eRwLPL0AywhEPH/driTlelYfIYA2uWl8d 7UD1afM5cR2qL4Z1R0KWL81b1xCrv+nMyBCbxXa2HqQO X-Google-Smtp-Source: AGHT+IGf8u7tecFEIP2R8XxTn2lqoYtq4GnL9u3ix4pWfO6ecs95Uqzx+KX66d8y8673IJHrSDhZYQ== X-Received: by 2002:a17:902:e788:b0:223:4c09:20b8 with SMTP id d9443c01a7336-22bea4f0043mr19086095ad.37.1744345906792; Thu, 10 Apr 2025 21:31:46 -0700 (PDT) Received: from wheely.local0.net ([220.253.99.94]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-22ac7b64906sm39361625ad.48.2025.04.10.21.31.43 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 10 Apr 2025 21:31:46 -0700 (PDT) From: Nicholas Piggin To: Akihiko Odaki Cc: Nicholas Piggin , qemu-devel@nongnu.org, Dmitry Fleytman , Jason Wang , Sriram Yagnaraman , Fabiano Rosas , Laurent Vivier , Paolo Bonzini Subject: [PATCH v2 2/8] net/e1000e: Permit disabling interrupt throttling Date: Fri, 11 Apr 2025 14:31:22 +1000 Message-ID: <20250411043128.201289-3-npiggin@gmail.com> X-Mailer: git-send-email 2.47.1 In-Reply-To: <20250411043128.201289-1-npiggin@gmail.com> References: <20250411043128.201289-1-npiggin@gmail.com> MIME-Version: 1.0 Received-SPF: pass client-ip=2607:f8b0:4864:20::631; envelope-from=npiggin@gmail.com; helo=mail-pl1-x631.google.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, FREEMAIL_FROM=0.001, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+qemu-devel=archiver.kernel.org@nongnu.org Sender: qemu-devel-bounces+qemu-devel=archiver.kernel.org@nongnu.org The spec explicitly permits xITR register interval field to have a value of zero to disable throttling. The e1000e model already allows for this in the throttling logic, so remove the minimum value for the register. The spec appears to say there is a maximum observable interrupt rate when throttling is enabled, regardless of ITR value, so throttle timer calculation is clamped to that minimum value. EITR registers default to 0, as specified in spec 7.4.4. Signed-off-by: Nicholas Piggin --- hw/net/e1000e_core.c | 25 +++++++++++++++++-------- 1 file changed, 17 insertions(+), 8 deletions(-) diff --git a/hw/net/e1000e_core.c b/hw/net/e1000e_core.c index 24138587905..96f74f1ea14 100644 --- a/hw/net/e1000e_core.c +++ b/hw/net/e1000e_core.c @@ -51,8 +51,17 @@ #include "trace.h" -/* No more then 7813 interrupts per second according to spec 10.2.4.2 */ -#define E1000E_MIN_XITR (500) +/* + * A suggested range for ITR is 651-5580, according to spec 10.2.4.2, but + * QEMU has traditionally set 500 here. + */ +#define E1000E_DEFAULT_ITR (500) + +/* + * spec 7.4.4 ITR rules says the maximum observable interrupt rate from the + * adapter should not exceed 7813/s (corresponding to 500). + */ +#define E1000E_EFFECTIVE_MIN_XITR (500) #define E1000E_MAX_TX_FRAGS (64) @@ -105,8 +114,9 @@ e1000e_lower_legacy_irq(E1000ECore *core) static inline void e1000e_intrmgr_rearm_timer(E1000IntrDelayTimer *timer) { - int64_t delay_ns = (int64_t) timer->core->mac[timer->delay_reg] * - timer->delay_resolution_ns; + uint32_t delay = MAX(timer->core->mac[timer->delay_reg], + E1000E_EFFECTIVE_MIN_XITR); + int64_t delay_ns = (int64_t)delay * timer->delay_resolution_ns; trace_e1000e_irq_rearm_timer(timer->delay_reg << 2, delay_ns); @@ -2783,7 +2793,7 @@ e1000e_set_itr(E1000ECore *core, int index, uint32_t val) trace_e1000e_irq_itr_set(val); core->itr_guest_value = interval; - core->mac[index] = MAX(interval, E1000E_MIN_XITR); + core->mac[index] = interval; } static void @@ -2795,7 +2805,7 @@ e1000e_set_eitr(E1000ECore *core, int index, uint32_t val) trace_e1000e_irq_eitr_set(eitr_num, val); core->eitr_guest_value[eitr_num] = interval; - core->mac[index] = MAX(interval, E1000E_MIN_XITR); + core->mac[index] = interval; } static void @@ -3444,8 +3454,7 @@ static const uint32_t e1000e_mac_reg_init[] = { [FACTPS] = E1000_FACTPS_LAN0_ON | 0x20000000, [SWSM] = 1, [RXCSUM] = E1000_RXCSUM_IPOFLD | E1000_RXCSUM_TUOFLD, - [ITR] = E1000E_MIN_XITR, - [EITR...EITR + E1000E_MSIX_VEC_NUM - 1] = E1000E_MIN_XITR, + [ITR] = E1000E_DEFAULT_ITR, }; static void e1000e_reset(E1000ECore *core, bool sw) From patchwork Fri Apr 11 04:31:23 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Nicholas Piggin X-Patchwork-Id: 14047543 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id 168D2C369A8 for ; Fri, 11 Apr 2025 04:33:26 +0000 (UTC) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1u363X-0004lE-Bl; Fri, 11 Apr 2025 00:31:55 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1u363W-0004it-1G for qemu-devel@nongnu.org; Fri, 11 Apr 2025 00:31:54 -0400 Received: from mail-pl1-x62d.google.com ([2607:f8b0:4864:20::62d]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1u363U-0007Ws-92 for qemu-devel@nongnu.org; Fri, 11 Apr 2025 00:31:53 -0400 Received: by mail-pl1-x62d.google.com with SMTP id d9443c01a7336-22409077c06so22331495ad.1 for ; Thu, 10 Apr 2025 21:31:51 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1744345911; x=1744950711; darn=nongnu.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=zhBCmES6uddU8sJEXZmLe0udlv86ZCQnsEc40OzKfD8=; b=QGpoxyOOvBFXqyu0dksQGmEjhiLIs9Yr9RWsxm7hQ86u+eXaiKw0GNgFtkGdRxt43w XnQyYP3UIKFr7VjDaHrqGF2u5GmWCexGxLzsIYUIeJLYV6ONksI3sz0X6JGV37p4muqX yBJHaNuPdJjHXvO/k50s2Zc0US/H+u01uYrWZMyi+sh+H0yF+ZaKQG263c0Vuo2/YIJC k8p7s5Gj/+3gei8Ac+nTpDgEiSJl9ayaFUTEqQic95ZkgQEvWMrBmuxkf5y+e5XOoODZ K/RElhCwH0+LOM4JFuPL01yDyP+a3bDDzg0qNKFmA+U49CtT6uIkBEISkhj2a7F1n64M 5mnw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1744345911; x=1744950711; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=zhBCmES6uddU8sJEXZmLe0udlv86ZCQnsEc40OzKfD8=; b=JbcI3M2LGREL3bqso7ImFqk63QcXH1w6uYl5dcKxdws+rfU4UjrMMtFtiO6/SxP9hf Hw06cAuedvgHZIBT27wCvVOJPmQU0OKwC6j374RVU3apufFPrFY5EwHM4yPf8frnPrRl GTrp055naJU3BeZtmWsS9kcgE6bR20GXxxlFPhcVSdUT2M+fv/y8DTzeDOPX2KYN3YSt oUTPySr8MpBEdxitR0pWKlgTScAAmCtibimNkZ/3/4xqJ1ER7SVaV8pMmhIttMW9Lqwo gvsu1YF6o/PChBcDWcAPXGZ2jeuUgfb2YD1FzSGdhmMqJKJ8kUorA2yhckDWeFEhFkVS l8og== X-Forwarded-Encrypted: i=1; AJvYcCUSB+NLKRv6seNFGWFroDhz4h2tyaVCdI/y6oWkP3hW3RGyqX+RoljEa30dy5uMtrBrgE3uffKn8bwP@nongnu.org X-Gm-Message-State: AOJu0YzPQfJC4z1muOxhGss+bjFdmyQFPDNRic9S9LAITwWwo1R0WLVK zScFLHrr+GDNCFf+y8xFcYJ6DJePGcpz79mDQlzHYWUvufhA/VUA X-Gm-Gg: ASbGncs1WnYE5NANVF2CO/6pX4zmR1xZsub8LxG/o4TrEl+VALzRERGKaTafBdjih7K 7KlEbYsJiR+aaILEI1uqAWwp76UWc0Qc0nB21cd+ayju+/WcIslQ4ICea8q+FJQqwB5uiLNligb 5ZA7x6dU0UuvFUeOJGvvR01hcnS9EBnB6pA6ad7bp6qNweIABsBXvZddxinnyy0SGQyx3QMMdU9 mQzkaAdlwCv/loLEjsp5LMFsoNKI6/ybFrFrRe5109UHIbzPdbEZdiFNGyjCzndGkjcOiCpKwYw YvO/3CfiU7dX4UAmVpvyNLGlODx5raZ/Z0s8kJQBqiX6 X-Google-Smtp-Source: AGHT+IHjJaFsCXfhooncVF9GK105/9B/2T4UqPvCOItHVkn5Gor1F72X39qHV7Xd98D4WaNOU12zZQ== X-Received: by 2002:a17:903:244c:b0:224:2717:7993 with SMTP id d9443c01a7336-22bea4fe01dmr18988085ad.45.1744345911082; Thu, 10 Apr 2025 21:31:51 -0700 (PDT) Received: from wheely.local0.net ([220.253.99.94]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-22ac7b64906sm39361625ad.48.2025.04.10.21.31.47 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 10 Apr 2025 21:31:50 -0700 (PDT) From: Nicholas Piggin To: Akihiko Odaki Cc: Nicholas Piggin , qemu-devel@nongnu.org, Dmitry Fleytman , Jason Wang , Sriram Yagnaraman , Fabiano Rosas , Laurent Vivier , Paolo Bonzini Subject: [PATCH v2 3/8] hw/net/e1000e|igb: Remove xitr_guest_value logic Date: Fri, 11 Apr 2025 14:31:23 +1000 Message-ID: <20250411043128.201289-4-npiggin@gmail.com> X-Mailer: git-send-email 2.47.1 In-Reply-To: <20250411043128.201289-1-npiggin@gmail.com> References: <20250411043128.201289-1-npiggin@gmail.com> MIME-Version: 1.0 Received-SPF: pass client-ip=2607:f8b0:4864:20::62d; envelope-from=npiggin@gmail.com; helo=mail-pl1-x62d.google.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, FREEMAIL_FROM=0.001, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+qemu-devel=archiver.kernel.org@nongnu.org Sender: qemu-devel-bounces+qemu-devel=archiver.kernel.org@nongnu.org The guest value xITR logic is not required now that the write functions store necessary data to be read back, and internal users mask and shift fields they need as they go. Signed-off-by: Nicholas Piggin --- hw/net/e1000e_core.c | 31 +++++++++++++++---------------- hw/net/igb_core.c | 14 ++++++++++++-- 2 files changed, 27 insertions(+), 18 deletions(-) diff --git a/hw/net/e1000e_core.c b/hw/net/e1000e_core.c index 96f74f1ea14..f8e6522f810 100644 --- a/hw/net/e1000e_core.c +++ b/hw/net/e1000e_core.c @@ -2563,18 +2563,6 @@ e1000e_mac_swsm_read(E1000ECore *core, int index) return val; } -static uint32_t -e1000e_mac_itr_read(E1000ECore *core, int index) -{ - return core->itr_guest_value; -} - -static uint32_t -e1000e_mac_eitr_read(E1000ECore *core, int index) -{ - return core->eitr_guest_value[index - EITR]; -} - static uint32_t e1000e_mac_icr_read(E1000ECore *core, int index) { @@ -2792,7 +2780,6 @@ e1000e_set_itr(E1000ECore *core, int index, uint32_t val) trace_e1000e_irq_itr_set(val); - core->itr_guest_value = interval; core->mac[index] = interval; } @@ -2804,7 +2791,6 @@ e1000e_set_eitr(E1000ECore *core, int index, uint32_t val) trace_e1000e_irq_eitr_set(eitr_num, val); - core->eitr_guest_value[eitr_num] = interval; core->mac[index] = interval; } @@ -3029,6 +3015,7 @@ static const readops e1000e_macreg_readops[] = { e1000e_getreg(GSCN_1), e1000e_getreg(FCAL), e1000e_getreg(FLSWCNT), + e1000e_getreg(ITR), [TOTH] = e1000e_mac_read_clr8, [GOTCH] = e1000e_mac_read_clr8, @@ -3062,7 +3049,6 @@ static const readops e1000e_macreg_readops[] = { [MPRC] = e1000e_mac_read_clr4, [BPTC] = e1000e_mac_read_clr4, [TSCTC] = e1000e_mac_read_clr4, - [ITR] = e1000e_mac_itr_read, [CTRL] = e1000e_get_ctrl, [TARC1] = e1000e_get_tarc, [SWSM] = e1000e_mac_swsm_read, @@ -3087,7 +3073,7 @@ static const readops e1000e_macreg_readops[] = { [RETA ... RETA + 31] = e1000e_mac_readreg, [RSSRK ... RSSRK + 31] = e1000e_mac_readreg, [MAVTV0 ... MAVTV3] = e1000e_mac_readreg, - [EITR...EITR + E1000E_MSIX_VEC_NUM - 1] = e1000e_mac_eitr_read + [EITR...EITR + E1000E_MSIX_VEC_NUM - 1] = e1000e_mac_readreg, }; enum { E1000E_NREADOPS = ARRAY_SIZE(e1000e_macreg_readops) }; @@ -3517,13 +3503,26 @@ void e1000e_core_pre_save(E1000ECore *core) core->tx[i].skip_cp = true; } } + + /* back compat, QEMU moves xITR in itr_guest_value state */ + core->itr_guest_value = core->mac[ITR]; + for (i = 0; i < E1000E_MSIX_VEC_NUM; i++) { + core->eitr_guest_value[i] = core->mac[EITR + i]; + } } int e1000e_core_post_load(E1000ECore *core) { + int i; NetClientState *nc = qemu_get_queue(core->owner_nic); + /* back compat */ + core->mac[ITR] = core->itr_guest_value; + for (i = 0; i < E1000E_MSIX_VEC_NUM; i++) { + core->mac[EITR + i] = core->eitr_guest_value[i]; + } + /* * nc.link_down can't be migrated, so infer link_down according * to link status bit in core.mac[STATUS]. diff --git a/hw/net/igb_core.c b/hw/net/igb_core.c index 39e3ce1c8fe..5d169c059d9 100644 --- a/hw/net/igb_core.c +++ b/hw/net/igb_core.c @@ -2880,7 +2880,7 @@ igb_mac_swsm_read(IGBCore *core, int index) static uint32_t igb_mac_eitr_read(IGBCore *core, int index) { - return core->eitr_guest_value[index - EITR0]; + return core->mac[index - EITR0]; } static uint32_t igb_mac_vfmailbox_read(IGBCore *core, int index) @@ -3046,7 +3046,6 @@ igb_set_eitr(IGBCore *core, int index, uint32_t val) trace_igb_irq_eitr_set(eitr_num, val); - core->eitr_guest_value[eitr_num] = val & ~E1000_EITR_CNT_IGNR; core->mac[index] = val & 0x7FFE; } @@ -4527,13 +4526,24 @@ void igb_core_pre_save(IGBCore *core) core->tx[i].skip_cp = true; } } + + /* back compat, QEMU moves EITR in eitr_guest_value state */ + for (i = 0; i < IGB_INTR_NUM; i++) { + core->eitr_guest_value[i] = core->mac[EITR0 + i]; + } } int igb_core_post_load(IGBCore *core) { + int i; NetClientState *nc = qemu_get_queue(core->owner_nic); + /* back compat */ + for (i = 0; i < IGB_INTR_NUM; i++) { + core->mac[EITR0 + i] = core->eitr_guest_value[i]; + } + /* * nc.link_down can't be migrated, so infer link_down according * to link status bit in core.mac[STATUS]. From patchwork Fri Apr 11 04:31:24 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Nicholas Piggin X-Patchwork-Id: 14047539 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id 620B3C36010 for ; Fri, 11 Apr 2025 04:33:01 +0000 (UTC) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1u363d-0004mV-8Y; Fri, 11 Apr 2025 00:32:01 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1u363b-0004mK-QB for qemu-devel@nongnu.org; Fri, 11 Apr 2025 00:31:59 -0400 Received: from mail-pl1-x632.google.com ([2607:f8b0:4864:20::632]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1u363a-0007YP-4S for qemu-devel@nongnu.org; Fri, 11 Apr 2025 00:31:59 -0400 Received: by mail-pl1-x632.google.com with SMTP id d9443c01a7336-224341bbc1dso14943485ad.3 for ; Thu, 10 Apr 2025 21:31:57 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1744345917; x=1744950717; darn=nongnu.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=EdEHRQIcS/KoLKBQT/QdqdalMsNW84j9PK9MoRDA6/o=; b=ZQiq9eCXV8fvrxBPOltg+j7ZryW7GI7p9wAjCNxF6oMzsrwiibnw21EtJ4wS8cJfBt pXs1mf6r7PSiFrQUyvpVkrLxtGdTn/EmutoJ1pfwMWzD5f2G5kVL2C5fHHcmlFVoZKUX 56b5LBAIEvmMJpMFBOa7mqQBgdjk/3uZJRaV0pqNLlfj6vD8s++dSzpAx6U0SXOHknLo UmahqTW6KsL/k/kWYYdsDiMpiyTgPr0o7uRum1F+thshpsVv1KilRM2Q9Lhdo+L1Isut EEkwguBAdhB1x6gwWxgup8l2DBFcrMi/2Wq+hX3xqEx9Wc3SUixX1fKo1tvHdtlIL28e L7sw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1744345917; x=1744950717; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=EdEHRQIcS/KoLKBQT/QdqdalMsNW84j9PK9MoRDA6/o=; b=jC7ao2vQQ1d6JZN5YuYDCtxXrUabORXMBsi6BB+nHIiSH+YyinbjNZ6kTOIfGVqmFU 0l90VudO5fmikPNnD7+EePG83L0hEs9y0RWeGQxZt6OJnvi/mB+AKDfE84GrGvvFiuy7 QlQLyPZj2z/TTczoqyB4dqO4ZvAnsCXLEvc84o67109tpFnaA0paFIcOzB4uRoJSFNv3 yjl4DC4Cdlft/dCm8zQg0Zlly0fp/2JLEnTrO4Hm95WuYyQXENGfH+dd/uSdcO8z2d8F 2LqyPjedrJc3BlaQmsY6+gKKNv/o/pXAkCoWsGgUb+Tnl8EW8STotMPSaVjI3Q3mw6Jm nhnw== X-Forwarded-Encrypted: i=1; AJvYcCVI2U0itqsMhAzM8iY/XziFK57dKBJfclDE+JCdkuyH4R/U84OfPUT/E9llYgcPi2AojsfelSPcxbq/@nongnu.org X-Gm-Message-State: AOJu0YzWHw8MVpEDZGi3vEHYbXovLNH73aRv8W5iVpAStpOgaqE9PKgz Rr4Sgzq3l2r+L94YG5ucfmNvqMomzp5Fm6bwhyi05+ZPC8NMo3wP X-Gm-Gg: ASbGncvBAGBYHsCrZYeF+5TgapTcCIib7NH8C3+vb1md8jKqFzRF7ypqXC9YhMPgwJZ JqPCKYySqqQTXs1gqU8YMmVEkGlaVEbk6DK6PhLKDHp2tkP292sxK3Myw2EoBfGw5Px5SDd7eng AkHQpzhSRhk6ugeXn5A2tyFEcSsZcJsQv5k0hj6Su5cVHREGLjK5pJgZGRaBavnLAIGs1srl0+m pkCCpsfIj3IMj02Rg81qRKVNF0G+YZuKx0DYXM61sHkoTk+b/Xp5VsssfmTPw6OVNaDDMRO/6Qm nkp0jHLms8kVVa6lEiyfVjOtMO4Zeb7T/UEgo7t2kWXD X-Google-Smtp-Source: AGHT+IEKIQZsI6EtuTHSxMWXhSXtnZNyYkEgQ+6lwyGbrIyopf8Tawi/Nekhcd6h68RomfOad26wCA== X-Received: by 2002:a17:902:d4c5:b0:220:c63b:d93c with SMTP id d9443c01a7336-22bea4fee9amr19251675ad.44.1744345916701; Thu, 10 Apr 2025 21:31:56 -0700 (PDT) Received: from wheely.local0.net ([220.253.99.94]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-22ac7b64906sm39361625ad.48.2025.04.10.21.31.51 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 10 Apr 2025 21:31:56 -0700 (PDT) From: Nicholas Piggin To: Akihiko Odaki Cc: Nicholas Piggin , qemu-devel@nongnu.org, Dmitry Fleytman , Jason Wang , Sriram Yagnaraman , Fabiano Rosas , Laurent Vivier , Paolo Bonzini , "Michael S. Tsirkin" , Marcel Apfelbaum Subject: [PATCH v2 4/8] qtest/e1000e|igb: assert irqs are clear before triggering an irq Date: Fri, 11 Apr 2025 14:31:24 +1000 Message-ID: <20250411043128.201289-5-npiggin@gmail.com> X-Mailer: git-send-email 2.47.1 In-Reply-To: <20250411043128.201289-1-npiggin@gmail.com> References: <20250411043128.201289-1-npiggin@gmail.com> MIME-Version: 1.0 Received-SPF: pass client-ip=2607:f8b0:4864:20::632; envelope-from=npiggin@gmail.com; helo=mail-pl1-x632.google.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, FREEMAIL_FROM=0.001, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+qemu-devel=archiver.kernel.org@nongnu.org Sender: qemu-devel-bounces+qemu-devel=archiver.kernel.org@nongnu.org Assert there is no existing irq raised that would lead to a false positive interrupt test. e1000e has to disable interrupt throttling for this test, because it can cause delayed superfluous interrupts which trip the assertions. Cc: Michael S. Tsirkin Cc: Marcel Apfelbaum Cc: Dmitry Fleytman Cc: Akihiko Odaki Cc: Sriram Yagnaraman Signed-off-by: Nicholas Piggin --- tests/qtest/libqos/e1000e.h | 1 + tests/qtest/e1000e-test.c | 10 ++++++++++ tests/qtest/igb-test.c | 6 ++++++ tests/qtest/libqos/e1000e.c | 9 ++++++++- 4 files changed, 25 insertions(+), 1 deletion(-) diff --git a/tests/qtest/libqos/e1000e.h b/tests/qtest/libqos/e1000e.h index 30643c80949..e693670119f 100644 --- a/tests/qtest/libqos/e1000e.h +++ b/tests/qtest/libqos/e1000e.h @@ -54,6 +54,7 @@ static inline uint32_t e1000e_macreg_read(QE1000E *d, uint32_t reg) return qpci_io_readl(&d_pci->pci_dev, d_pci->mac_regs, reg); } +bool e1000e_pending_isr(QE1000E *d, uint16_t msg_id); void e1000e_wait_isr(QE1000E *d, uint16_t msg_id); void e1000e_tx_ring_push(QE1000E *d, void *descr); void e1000e_rx_ring_push(QE1000E *d, void *descr); diff --git a/tests/qtest/e1000e-test.c b/tests/qtest/e1000e-test.c index 746d26cfb67..a538c72cc84 100644 --- a/tests/qtest/e1000e-test.c +++ b/tests/qtest/e1000e-test.c @@ -61,6 +61,9 @@ static void e1000e_send_verify(QE1000E *d, int *test_sockets, QGuestAllocator *a E1000_TXD_DTYP_D | sizeof(buffer)); + /* Ensure the interrupt has not been taken already */ + g_assert(!e1000e_pending_isr(d, E1000E_TX0_MSG_ID)); + /* Put descriptor to the ring */ e1000e_tx_ring_push(d, &descr); @@ -105,6 +108,9 @@ static void e1000e_receive_verify(QE1000E *d, int *test_sockets, QGuestAllocator char buffer[64]; int ret; + /* Ensure the interrupt has not been taken already */ + g_assert(!e1000e_pending_isr(d, E1000E_RX0_MSG_ID)); + /* Send a dummy packet to device's socket*/ ret = iov_send(test_sockets[0], iov, 2, 0, sizeof(len) + sizeof(packet)); g_assert_cmpint(ret, == , sizeof(packet) + sizeof(len)); @@ -188,6 +194,10 @@ static void test_e1000e_multiple_transfers(void *obj, void *data, return; } + /* Clear EITR because buggy QEMU throttle timer causes superfluous irqs */ + e1000e_macreg_write(d, E1000_EITR + E1000E_RX0_MSG_ID * 4, 0); + e1000e_macreg_write(d, E1000_EITR + E1000E_TX0_MSG_ID * 4, 0); + for (i = 0; i < iterations; i++) { e1000e_send_verify(d, data, alloc); e1000e_receive_verify(d, data, alloc); diff --git a/tests/qtest/igb-test.c b/tests/qtest/igb-test.c index cf8b4131cf2..12cdd8b498a 100644 --- a/tests/qtest/igb-test.c +++ b/tests/qtest/igb-test.c @@ -64,6 +64,9 @@ static void igb_send_verify(QE1000E *d, int *test_sockets, QGuestAllocator *allo E1000_TXD_DTYP_D | sizeof(buffer)); + /* Ensure the interrupt has not been taken already */ + g_assert(!e1000e_pending_isr(d, E1000E_TX0_MSG_ID)); + /* Put descriptor to the ring */ e1000e_tx_ring_push(d, &descr); @@ -119,6 +122,9 @@ static void igb_receive_verify(QE1000E *d, int *test_sockets, QGuestAllocator *a memset(&descr, 0, sizeof(descr)); descr.read.pkt_addr = cpu_to_le64(data); + /* Ensure the interrupt has not been taken already */ + g_assert(!e1000e_pending_isr(d, E1000E_RX0_MSG_ID)); + /* Put descriptor to the ring */ e1000e_rx_ring_push(d, &descr); diff --git a/tests/qtest/libqos/e1000e.c b/tests/qtest/libqos/e1000e.c index 925654c7fd4..0bf70e25389 100644 --- a/tests/qtest/libqos/e1000e.c +++ b/tests/qtest/libqos/e1000e.c @@ -77,13 +77,20 @@ static void e1000e_foreach_callback(QPCIDevice *dev, int devfn, void *data) g_free(dev); } +bool e1000e_pending_isr(QE1000E *d, uint16_t msg_id) +{ + QE1000E_PCI *d_pci = container_of(d, QE1000E_PCI, e1000e); + + return qpci_msix_pending(&d_pci->pci_dev, msg_id); +} + void e1000e_wait_isr(QE1000E *d, uint16_t msg_id) { QE1000E_PCI *d_pci = container_of(d, QE1000E_PCI, e1000e); guint64 end_time = g_get_monotonic_time() + 5 * G_TIME_SPAN_SECOND; do { - if (qpci_msix_pending(&d_pci->pci_dev, msg_id)) { + if (e1000e_pending_isr(d, msg_id)) { return; } qtest_clock_step(d_pci->pci_dev.bus->qts, 10000); From patchwork Fri Apr 11 04:31:25 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Nicholas Piggin X-Patchwork-Id: 14047535 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id 22D5DC369A2 for ; Fri, 11 Apr 2025 04:32:37 +0000 (UTC) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1u363i-0004nQ-Hk; Fri, 11 Apr 2025 00:32:06 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1u363g-0004nA-8O for qemu-devel@nongnu.org; Fri, 11 Apr 2025 00:32:04 -0400 Received: from mail-pg1-x531.google.com ([2607:f8b0:4864:20::531]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1u363e-0007aT-L1 for qemu-devel@nongnu.org; Fri, 11 Apr 2025 00:32:03 -0400 Received: by mail-pg1-x531.google.com with SMTP id 41be03b00d2f7-aee773df955so2239663a12.1 for ; Thu, 10 Apr 2025 21:32:02 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1744345921; x=1744950721; darn=nongnu.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=RDcM4WPa5rlnwzZNxe25n1sS0neW52egb9WU2vT5q7c=; b=YQO22eWyyjeTKj0T8IMMzTR3SF3XN+DHaTf2hYFHfiSGtRouv/nU71aL5J0k9t1h+N 70AK/Ms6XSzPXGWB/eJH0TYi7/veSYxRP5aJZbj9z0PZ90Hj4Qmv7eXhSI6Zc/XFAZjn HTkh+9pg+JGNBmhvjnq7xVpfu3DI6l4vSIU3KaynPYwj8BTeLMqvNRL5EY8KAZurGyG+ ZaLvkCC9UuRoM49WG9kmaHj8BYVwIkYkyy+7qeQObcuDFdfAs/zcaDGyBtJ05Al9lxmf F6N9Zbtsvk+mUpIEqUwk4YSS102nHfaVPkR+VAGV/PcEijvZux7V9a94XTuEsjnxS5R7 saNw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1744345921; x=1744950721; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=RDcM4WPa5rlnwzZNxe25n1sS0neW52egb9WU2vT5q7c=; b=W+yKR19w23XvgkG9ijkZ1XVt4Dij8Z1m8g9Eob9hQk8Rtl9ozgZQjzlP3mRsf+U4BN rE1J+pxzzzhvS41lV9nREQNTH7FsolrdSEpC71NLA66C5PBTO7FBfThwSaNE++2pO0XW LmyvApNCvLdNpG5nV/BM51433PrZNH9av75o0r53k5g7vZxuUAHpfFGE6R0rSXsQpNLG +afIX/ZczSgU2sozdnUvovsxSyHQzUIqg9R6/0nnc2yYLiNSki/IJOY6luV46PVB4IA7 Rt1yNvYuCehufkW1BhtowvvhuBetRtF/GiJFqKtFi4O5hDtaNsd78akXbJTt57W6qxUo 1ldg== X-Forwarded-Encrypted: i=1; AJvYcCUfnCu5MItwVoDb2oVfXov1pkeQ0n2D0UO72bCqwTFml2vIknGp2KCJ8gqBNxhiJmLbYL+PifjC1ZNR@nongnu.org X-Gm-Message-State: AOJu0YxYoY2dgniuoF5w25H/8YL+5AYPbn0aXCCKJwNhKVRuE8x8SQtD wPw1/LTh2Zj8KMcxfMTNbwnkrFvs5oOldKKA7QQ8zJ5y7q14ahMU X-Gm-Gg: ASbGncuFiW+jSlOCN6Bvt/kdD2KTyftsHV0q1ElfER0XtrORhVyyE4kHY6mPOotFCUn mv8O2jXnVDEsWdzcSSM3/BxAL6v73yZEtNxFoBpYyfrZQZUKecTn6UeWVDk8dPQFzEfQxQ7c8GY 0RkwKnKSGdLdn/WDMeLbidGMo28n+XMFb0AFqX56CMuNpu1rCMTgSphBMDNOLA6WW71u5rgxwxe cjXzNO/FT1uU8m3bmHbSBInanNhVNIgqb0IYvR5OYkiIG/gRkPq0wkR8Vx7TjGhEYIKUH56Lbw8 degk84U1H3SeOjqlI74zxzNv0j3321uc3GPAz3ESiopD X-Google-Smtp-Source: AGHT+IHzuibLXW6KC+wLKmDI0n4QV4AP1rgnosfGfIchfphMJYM+YVOho9rSSqlgudePRMjy+HpUCw== X-Received: by 2002:a17:902:c412:b0:224:7a4:b31 with SMTP id d9443c01a7336-22bea041ddbmr20706275ad.6.1744345920923; Thu, 10 Apr 2025 21:32:00 -0700 (PDT) Received: from wheely.local0.net ([220.253.99.94]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-22ac7b64906sm39361625ad.48.2025.04.10.21.31.57 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 10 Apr 2025 21:32:00 -0700 (PDT) From: Nicholas Piggin To: Akihiko Odaki Cc: Nicholas Piggin , qemu-devel@nongnu.org, Dmitry Fleytman , Jason Wang , Sriram Yagnaraman , Fabiano Rosas , Laurent Vivier , Paolo Bonzini Subject: [PATCH v2 5/8] net/igb: Fix interrupt throttling interval calculation Date: Fri, 11 Apr 2025 14:31:25 +1000 Message-ID: <20250411043128.201289-6-npiggin@gmail.com> X-Mailer: git-send-email 2.47.1 In-Reply-To: <20250411043128.201289-1-npiggin@gmail.com> References: <20250411043128.201289-1-npiggin@gmail.com> MIME-Version: 1.0 Received-SPF: pass client-ip=2607:f8b0:4864:20::531; envelope-from=npiggin@gmail.com; helo=mail-pg1-x531.google.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, FREEMAIL_FROM=0.001, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+qemu-devel=archiver.kernel.org@nongnu.org Sender: qemu-devel-bounces+qemu-devel=archiver.kernel.org@nongnu.org IGB throttling granularity is 1us, and interval field is in bits 2..14 of the EITRx registers. Fixes: 3a977deebe6b ("Intrdocue igb device emulation") Signed-off-by: Nicholas Piggin --- hw/net/igb_regs.h | 3 +++ hw/net/igb_core.c | 7 ++++--- 2 files changed, 7 insertions(+), 3 deletions(-) diff --git a/hw/net/igb_regs.h b/hw/net/igb_regs.h index 4dc4c31da27..1ed5ee5039a 100644 --- a/hw/net/igb_regs.h +++ b/hw/net/igb_regs.h @@ -146,6 +146,9 @@ union e1000_adv_rx_desc { #define IGB_82576_VF_DEV_ID 0x10CA #define IGB_I350_VF_DEV_ID 0x1520 +/* Delay increments in nanoseconds for interrupt throttling registers */ +#define IGB_INTR_THROTTLING_NS_RES (1000) + /* VLAN info */ #define IGB_TX_FLAGS_VLAN_MASK 0xffff0000 #define IGB_TX_FLAGS_VLAN_SHIFT 16 diff --git a/hw/net/igb_core.c b/hw/net/igb_core.c index 5d169c059d9..8fcc872a7c0 100644 --- a/hw/net/igb_core.c +++ b/hw/net/igb_core.c @@ -142,8 +142,9 @@ static void igb_msix_notify(IGBCore *core, unsigned int cause) static inline void igb_intrmgr_rearm_timer(IGBIntrDelayTimer *timer) { - int64_t delay_ns = (int64_t) timer->core->mac[timer->delay_reg] * - timer->delay_resolution_ns; + int64_t delay_ns = + (int64_t)((timer->core->mac[timer->delay_reg] & 0x7FFC) >> 2) * + timer->delay_resolution_ns; trace_e1000e_irq_rearm_timer(timer->delay_reg << 2, delay_ns); @@ -180,7 +181,7 @@ igb_intrmgr_initialize_all_timers(IGBCore *core, bool create) for (i = 0; i < IGB_INTR_NUM; i++) { core->eitr[i].core = core; core->eitr[i].delay_reg = EITR0 + i; - core->eitr[i].delay_resolution_ns = E1000_INTR_DELAY_NS_RES; + core->eitr[i].delay_resolution_ns = IGB_INTR_THROTTLING_NS_RES; } if (!create) { From patchwork Fri Apr 11 04:31:26 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Nicholas Piggin X-Patchwork-Id: 14047540 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id BFE1EC369A8 for ; Fri, 11 Apr 2025 04:33:03 +0000 (UTC) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1u363m-0004o3-4I; Fri, 11 Apr 2025 00:32:10 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1u363k-0004nr-Io for qemu-devel@nongnu.org; Fri, 11 Apr 2025 00:32:08 -0400 Received: from mail-pg1-x52c.google.com ([2607:f8b0:4864:20::52c]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1u363i-0007b7-L4 for qemu-devel@nongnu.org; Fri, 11 Apr 2025 00:32:08 -0400 Received: by mail-pg1-x52c.google.com with SMTP id 41be03b00d2f7-af9a7717163so1838842a12.2 for ; Thu, 10 Apr 2025 21:32:06 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1744345925; x=1744950725; darn=nongnu.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=NfLhK5Ve1CZHHq4PEpYL+RpdL0tfDTxqGVUFnDZJCSM=; b=TNepy+o18b7UdVkDd0nQ3n7bFETl4mEfDbMVydkFmvlXnxK2l4AYOMQ8bVrSxIIc2A +u4+JuOdGM1TIKNAE4L2rj6fQXnXMQxWQqNey7JgozawzOKmVAm+XNZn9mXG8bOTbVau L5qM6wFrHUbkNBumnRcg1x+urp5FQob85+ItYErftJNRaHhGQzsb7v4YvGZ62Uv69Sgz GGrxjWLarJOnDrA+SxGjG6tJ6uLRITa8vLY4vkm6r7aYG676dAb4/Hw3uvebYESVwdZY e39a1ENQWsHFa9FDaDBE4OTm7wrORUsBRcA55G9VZntJ0bvjHz6NgsC6AVTg8V3DXH0V G8KA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1744345925; x=1744950725; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=NfLhK5Ve1CZHHq4PEpYL+RpdL0tfDTxqGVUFnDZJCSM=; b=WlO1AmVJtdq8IqxopXz9/sb06ZMpNOEM0cTVblBwDsRrULFM8Gb+h3PDEdcOhCEPSF T5ym7WthH2MJ/y5gQPyspi0wz+biYSSkD0F62C3n8/am+KhBCxF0nGPkWhgDpB0G8rbt 5isIwiLU73LQJMRElJRjkAsRj/7pVBii31W89KhQUpKZFuxDdZkW00dwHglInfqZZETB 6O+pcCxGwif2g40lQ1HAL1bO4xtg0L0korsZkGbeiD1iM0bvqMKJOZC8LllBtTES3FU8 VsZNuyZ0AwIAJxmwl0pOGPJdVF7M48gG+Q9xmA51R66gkQ6dYL5D0jwYX01jHLSOn2dN nZ5g== X-Forwarded-Encrypted: i=1; AJvYcCUCzetL2kc255UIyNNGsBmuTEsZAw87wQLi9lTOLNqUBcenRTz9yDnuGE7SjHn2k1roDI48hrplmFRZ@nongnu.org X-Gm-Message-State: AOJu0YxIEMGv9AX8seS81CGdH0ROufh0UlazAwGjurajo+pet3JFdQ1t EXogbAe2tBHawqy2NQSYdsW1JbXapnDXkDVu742KuOZ5g+0h/Na+ X-Gm-Gg: ASbGncuLhQ5XLoxH6uuo1CGgUro1dUCxy71fKMQVOYJgOZehS0S1ec4WAx/2j/tb0IB ScqtCPjLBa7oMByAuOg8yGHVSBTHcGw5KhU7TzF+Kn+Vl2zq4qNtpqI32YaYETrWmHkIaphbbZP hPrVv+PKMkV2uMfsLaChDCjqAAbr3Vcm094OfUKbwOzGTxByz9faF3KdHJ3b+cPFeMXS7hmnc58 QAl2jhzcdJqOUiZqN+8riiKLgfvERzsfM9onbJ7d8GgzCEKrghrjORznse2VqmvNrNLODtCkDH/ A5sAG7FCCwI1jhC3W199UIx3TkAsOL3QOEDIVn6NiuaL X-Google-Smtp-Source: AGHT+IHZ6+mbNhL+NeLI+h1oG9nQe9gXLZCiKOkCw3XafgWYAsLPfSjDE5E2N2EqojUQZXAnfAn4sA== X-Received: by 2002:a17:902:fc44:b0:223:90ec:80f0 with SMTP id d9443c01a7336-22bea4afaa3mr22666935ad.22.1744345925112; Thu, 10 Apr 2025 21:32:05 -0700 (PDT) Received: from wheely.local0.net ([220.253.99.94]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-22ac7b64906sm39361625ad.48.2025.04.10.21.32.01 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 10 Apr 2025 21:32:04 -0700 (PDT) From: Nicholas Piggin To: Akihiko Odaki Cc: Nicholas Piggin , qemu-devel@nongnu.org, Dmitry Fleytman , Jason Wang , Sriram Yagnaraman , Fabiano Rosas , Laurent Vivier , Paolo Bonzini Subject: [PATCH v2 6/8] net/igb: Implement EITR Moderation Counter Date: Fri, 11 Apr 2025 14:31:26 +1000 Message-ID: <20250411043128.201289-7-npiggin@gmail.com> X-Mailer: git-send-email 2.47.1 In-Reply-To: <20250411043128.201289-1-npiggin@gmail.com> References: <20250411043128.201289-1-npiggin@gmail.com> MIME-Version: 1.0 Received-SPF: pass client-ip=2607:f8b0:4864:20::52c; envelope-from=npiggin@gmail.com; helo=mail-pg1-x52c.google.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, FREEMAIL_FROM=0.001, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+qemu-devel=archiver.kernel.org@nongnu.org Sender: qemu-devel-bounces+qemu-devel=archiver.kernel.org@nongnu.org IGB EITR registers have counter fields which reflect the current ITR and LLI counter values, as well as a bit to enable LLI moderation, and a bit to write the register without modifying the counter fields. Implement the EITR Moderation Counter (aka EITR counter), and counter ignore bit. The EITR counter is the time remaining in the interrupt moderation delay which is implemented as a QEMU timer. Log an unimp message if software tries to enable LLI moderation. Add a note about the problem with reloading timers after migration. Signed-off-by: Nicholas Piggin --- hw/net/igb_regs.h | 8 +++++-- hw/net/igb_core.c | 54 ++++++++++++++++++++++++++++++++++++++++------- 2 files changed, 52 insertions(+), 10 deletions(-) diff --git a/hw/net/igb_regs.h b/hw/net/igb_regs.h index 1ed5ee5039a..b612248264a 100644 --- a/hw/net/igb_regs.h +++ b/hw/net/igb_regs.h @@ -321,8 +321,12 @@ union e1000_adv_rx_desc { #define E1000_EICR_TX_QUEUE3 0x00000800 /* Tx Queue 3 Interrupt */ #define E1000_EICR_OTHER 0x80000000 /* Interrupt Cause Active */ -/* Extended Interrupt Cause Set */ -/* E1000_EITR_CNT_IGNR is only for 82576 and newer */ +/* Extended Interrupt Throttle */ +/* These are only for 82576 and newer */ +#define E1000_EITR_INTERVAL 0x00007FFC +#define E1000_EITR_LLI_EN 0x00008000 +#define E1000_EITR_LLI_CNT 0x001F0000 +#define E1000_EITR_ITR_CNT 0x7FE00000 #define E1000_EITR_CNT_IGNR 0x80000000 /* Don't reset counters on write */ #define E1000_TSYNCTXCTL_VALID 0x00000001 /* tx timestamp valid */ diff --git a/hw/net/igb_core.c b/hw/net/igb_core.c index 8fcc872a7c0..3ae3e53530b 100644 --- a/hw/net/igb_core.c +++ b/hw/net/igb_core.c @@ -140,12 +140,8 @@ static void igb_msix_notify(IGBCore *core, unsigned int cause) } static inline void -igb_intrmgr_rearm_timer(IGBIntrDelayTimer *timer) +igb_intrmgr_arm_timer(IGBIntrDelayTimer *timer, int64_t delay_ns) { - int64_t delay_ns = - (int64_t)((timer->core->mac[timer->delay_reg] & 0x7FFC) >> 2) * - timer->delay_resolution_ns; - trace_e1000e_irq_rearm_timer(timer->delay_reg << 2, delay_ns); timer_mod(timer->timer, qemu_clock_get_ns(QEMU_CLOCK_VIRTUAL) + delay_ns); @@ -153,6 +149,16 @@ igb_intrmgr_rearm_timer(IGBIntrDelayTimer *timer) timer->running = true; } +static inline void +igb_intrmgr_rearm_timer(IGBIntrDelayTimer *timer) +{ + uint32_t interval = (timer->core->mac[timer->delay_reg] & + E1000_EITR_INTERVAL) >> 2; + int64_t delay_ns = (int64_t)interval * timer->delay_resolution_ns; + + igb_intrmgr_arm_timer(timer, delay_ns); +} + static void igb_intmgr_timer_resume(IGBIntrDelayTimer *timer) { @@ -2881,7 +2887,21 @@ igb_mac_swsm_read(IGBCore *core, int index) static uint32_t igb_mac_eitr_read(IGBCore *core, int index) { - return core->mac[index - EITR0]; + uint32_t eitr_num = index - EITR0; + uint32_t val = core->mac[eitr_num]; + IGBIntrDelayTimer *timer = &core->eitr[eitr_num]; + + if (timer->running) { /* timer is pending, find time remaining */ + int64_t remains = timer_expire_time_ns(timer->timer) - + qemu_clock_get_ns(QEMU_CLOCK_VIRTUAL); + if (remains > 0) { + uint32_t cnt; /* CNT is the most significant 10 of 12 bits */ + cnt = remains / timer->delay_resolution_ns; + val |= ((cnt >> 2) << 21) & E1000_EITR_ITR_CNT; + } + } + + return val; } static uint32_t igb_mac_vfmailbox_read(IGBCore *core, int index) @@ -3047,7 +3067,23 @@ igb_set_eitr(IGBCore *core, int index, uint32_t val) trace_igb_irq_eitr_set(eitr_num, val); - core->mac[index] = val & 0x7FFE; + if (val & (E1000_EITR_LLI_EN | E1000_EITR_LLI_CNT)) { + qemu_log_mask(LOG_UNIMP, "%s: LLI moderation not supported, ignoring\n", + __func__); + } + + if (!(val & E1000_EITR_CNT_IGNR)) { + IGBIntrDelayTimer *timer = &core->eitr[eitr_num]; + uint32_t itr_cnt = (val & E1000_EITR_ITR_CNT) >> 21; + /* CNT is the most significant 10 of 12 bits */ + uint64_t ns = (itr_cnt << 2) * timer->delay_resolution_ns; + + igb_intrmgr_arm_timer(timer, ns); + } + + val &= E1000_EITR_INTERVAL | E1000_EITR_LLI_EN; + + core->mac[index] = val; } static void @@ -4553,7 +4589,9 @@ igb_core_post_load(IGBCore *core) /* * we need to restart intrmgr timers, as an older version of - * QEMU can have stopped them before migration + * QEMU can have stopped them before migration. + * XXX: re-setting timers with fresh values breaks deterministic + * replay. */ igb_intrmgr_resume(core); igb_autoneg_resume(core); From patchwork Fri Apr 11 04:31:27 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Nicholas Piggin X-Patchwork-Id: 14047542 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id AB42EC36010 for ; Fri, 11 Apr 2025 04:33:24 +0000 (UTC) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1u363q-0004pv-4n; Fri, 11 Apr 2025 00:32:14 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1u363o-0004pH-VK for qemu-devel@nongnu.org; Fri, 11 Apr 2025 00:32:12 -0400 Received: from mail-pl1-x636.google.com ([2607:f8b0:4864:20::636]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1u363n-0007bi-9y for qemu-devel@nongnu.org; Fri, 11 Apr 2025 00:32:12 -0400 Received: by mail-pl1-x636.google.com with SMTP id d9443c01a7336-22401f4d35aso18472825ad.2 for ; Thu, 10 Apr 2025 21:32:10 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1744345930; x=1744950730; darn=nongnu.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=r9QvwtGlAYFgKB3sHg3JoUwlEFl1jCGwyJmMH8E5dOc=; b=VB97LZ/OyLFpgS80J/iSvSUKyJB3iR/6gOxLqfFH1A7rtOGcam6FOUh9y+f/XLY7hu Wdss00mu4QFnn3OczxnbSZb+JYfrKl4UTcqx7fKAsig2FzuzzFzSWATETU/FWyzYBs1q 52tTJ+W509vJDfyhHChYIWRsERcB1pibsIB2PJLBHR+emTeIMZZLgXcf7XfmBs57s8nE fNspBuK+3kAh+oWIepMfyKUTV7Fxc7o5xdKOYABeZyE0buYc3BLPjacK2B4rgDGhAesg 1bLl5TeTcGSoDHyu3XDBP+IVBPntFBpQ4x6C8VP5mHel39REVEYTqw3Id2AyqTU2XsXk 3Shg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1744345930; x=1744950730; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=r9QvwtGlAYFgKB3sHg3JoUwlEFl1jCGwyJmMH8E5dOc=; b=uUvN8hIpjzG/lHhiZ8Py7Wtqco+D2cczFsEitUY6j23MdvD8IY5Sw7MaEt5/WZkrKl hMWf9mf+OGVfW2Q+OqEQaBKtlPFi9KqdZgAMqSixrIaEcBMqS8B+u79zmlx2//eLLLUG +HSRMxa7urlAchZp6SrW7IAttTSI0y1muxIHLJGuAN4txM6sWtJaPqXj0U4c+onH9r+Z Qq0cRBM/5+W3i/Zg7pjLgVSEpSTTqHke2mGCKhDa3wULMmHCxbB+2PJr8RsiNRvuC1te cazLUYVXJuwjzi/ak6NqN/RmTzghzPOy+JPt8BjTXNvuzhCXskU7hq0SEstOkDHPuv03 OfUg== X-Forwarded-Encrypted: i=1; AJvYcCWg9uAnbo+Tf8jiZIS3LjCvHHl+MAq0UITFDpLxrlQIbpNbTPNR3K498AsmUTbLHitFAgKRSxw8MtAP@nongnu.org X-Gm-Message-State: AOJu0YyAy1Q8U88ygsGjnk8ghmvBjcB0TkuSUdmfUl8lV/gFM0qn6fHB JzwSeftEP3hFQhVbCXOElxq4nxpgdRCP+xoM69MtCFNdmWhij3bP X-Gm-Gg: ASbGncuKVWRByWnRZP0EgxnYD5FHLvVyWKxzu16O3JwN9nm9xAv13XNs5BqM2B5TPK4 MadD8XOUjye1Sy/AKCkDbsAIUwmuAyuAqgD4OG8s2UiNi1APvU/Jqh+1odz64uOQUlKlQVd2cQ0 UpY/njnLDUiolOnP2GPUdYin37W/2d3b+xPVGwznM7/AZPLCXZGXIniWrpGdP/SBCpl4w6CtVuL FkQ//dQZqSdKzUCZ8+TRC+vVkkX/TEKInvs7ovioXdHrF97BPxH6rLxZg79BLsJAIW1OOdedq3u 4LjW1XfE/c76EjUL1y90PelqaI0GkzyEZ0H9FasoTaJQ X-Google-Smtp-Source: AGHT+IEwj1gO/sz8eMNQn3t/k/aY3W2e9JnwHJXkVFLmBMM9zsq5kcFOvrGOMbc2mzg+2FqH6o9Qhw== X-Received: by 2002:a17:902:c94d:b0:223:47d9:1964 with SMTP id d9443c01a7336-22bea4f39bamr19695005ad.34.1744345929759; Thu, 10 Apr 2025 21:32:09 -0700 (PDT) Received: from wheely.local0.net ([220.253.99.94]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-22ac7b64906sm39361625ad.48.2025.04.10.21.32.05 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 10 Apr 2025 21:32:09 -0700 (PDT) From: Nicholas Piggin To: Akihiko Odaki Cc: Nicholas Piggin , qemu-devel@nongnu.org, Dmitry Fleytman , Jason Wang , Sriram Yagnaraman , Fabiano Rosas , Laurent Vivier , Paolo Bonzini Subject: [PATCH v2 7/8] net/e1000e|igb: Fix interrupt throttling logic Date: Fri, 11 Apr 2025 14:31:27 +1000 Message-ID: <20250411043128.201289-8-npiggin@gmail.com> X-Mailer: git-send-email 2.47.1 In-Reply-To: <20250411043128.201289-1-npiggin@gmail.com> References: <20250411043128.201289-1-npiggin@gmail.com> MIME-Version: 1.0 Received-SPF: pass client-ip=2607:f8b0:4864:20::636; envelope-from=npiggin@gmail.com; helo=mail-pl1-x636.google.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, FREEMAIL_FROM=0.001, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+qemu-devel=archiver.kernel.org@nongnu.org Sender: qemu-devel-bounces+qemu-devel=archiver.kernel.org@nongnu.org Interrupt throttling is broken in several ways: - Timer expiry sends an interrupt even if there is no cause. - (e1000e) Mitigated interrupts still auto-clear cause bits. - Timer expiry that results in an interrupt does not re-arm the timer so an interrupt can appear immediately after the timer expiry interrupt. To fix: - When the throttle timer expires, check the cause bits corresponding to the msix vector before sending an irq. - (e1000e) Skip the auto-clear logic if an interrupt is delayed, and send delayed irqs using e1000e_msix_notify() to perform auto-clear. - Re-load the throttle timer when a delayed interrupt is signaled. e1000e gets this by signaling them with e1000e_msix_notify(), igb calls igb_intrmgr_rearm_timer() directly. Signed-off-by: Nicholas Piggin --- hw/net/e1000e_core.c | 59 +++++++++++++++++++++++++++++++++++++++----- hw/net/igb_core.c | 50 ++++++++++++++++++++++++------------- 2 files changed, 86 insertions(+), 23 deletions(-) diff --git a/hw/net/e1000e_core.c b/hw/net/e1000e_core.c index f8e6522f810..6fb8da32e4d 100644 --- a/hw/net/e1000e_core.c +++ b/hw/net/e1000e_core.c @@ -178,16 +178,62 @@ e1000e_intrmgr_on_throttling_timer(void *opaque) } } +static uint32_t find_msix_causes(E1000ECore *core, int vec) +{ + uint32_t causes = 0; + uint32_t int_cfg; + + int_cfg = E1000_IVAR_RXQ0(core->mac[IVAR]); + if (E1000_IVAR_ENTRY_VALID(int_cfg) && + E1000_IVAR_ENTRY_VEC(int_cfg) == vec) { + causes |= E1000_ICR_RXQ0; + } + + int_cfg = E1000_IVAR_RXQ1(core->mac[IVAR]); + if (E1000_IVAR_ENTRY_VALID(int_cfg) && + E1000_IVAR_ENTRY_VEC(int_cfg) == vec) { + causes |= E1000_ICR_RXQ1; + } + + int_cfg = E1000_IVAR_TXQ0(core->mac[IVAR]); + if (E1000_IVAR_ENTRY_VALID(int_cfg) && + E1000_IVAR_ENTRY_VEC(int_cfg) == vec) { + causes |= E1000_ICR_TXQ0; + } + + int_cfg = E1000_IVAR_TXQ1(core->mac[IVAR]); + if (E1000_IVAR_ENTRY_VALID(int_cfg) && + E1000_IVAR_ENTRY_VEC(int_cfg) == vec) { + causes |= E1000_ICR_TXQ1; + } + + int_cfg = E1000_IVAR_OTHER(core->mac[IVAR]); + if (E1000_IVAR_ENTRY_VALID(int_cfg) && + E1000_IVAR_ENTRY_VEC(int_cfg) == vec) { + causes |= E1000_ICR_OTHER; + } + + return causes; +} + +static void +e1000e_msix_notify(E1000ECore *core, uint32_t causes); + static void e1000e_intrmgr_on_msix_throttling_timer(void *opaque) { E1000IntrDelayTimer *timer = opaque; - int idx = timer - &timer->core->eitr[0]; + E1000ECore *core = timer->core; + int idx = timer - &core->eitr[0]; + uint32_t causes; timer->running = false; - trace_e1000e_irq_msix_notify_postponed_vec(idx); - msix_notify(timer->core->owner, idx); + causes = find_msix_causes(core, idx) & core->mac[IMS] & core->mac[ICR]; + if (causes) { + trace_e1000e_irq_msix_notify_postponed_vec(idx); + e1000e_msix_notify(core, causes); + } } static void @@ -1992,10 +2038,11 @@ e1000e_msix_notify_one(E1000ECore *core, uint32_t cause, uint32_t int_cfg) if (E1000_IVAR_ENTRY_VALID(int_cfg)) { uint32_t vec = E1000_IVAR_ENTRY_VEC(int_cfg); if (vec < E1000E_MSIX_VEC_NUM) { - if (!e1000e_eitr_should_postpone(core, vec)) { - trace_e1000e_irq_msix_notify_vec(vec); - msix_notify(core->owner, vec); + if (e1000e_eitr_should_postpone(core, vec)) { + return; } + trace_e1000e_irq_msix_notify_vec(vec); + msix_notify(core->owner, vec); } else { trace_e1000e_wrn_msix_vec_wrong(cause, int_cfg); } diff --git a/hw/net/igb_core.c b/hw/net/igb_core.c index 3ae3e53530b..cc25a1d5baa 100644 --- a/hw/net/igb_core.c +++ b/hw/net/igb_core.c @@ -152,11 +152,14 @@ igb_intrmgr_arm_timer(IGBIntrDelayTimer *timer, int64_t delay_ns) static inline void igb_intrmgr_rearm_timer(IGBIntrDelayTimer *timer) { - uint32_t interval = (timer->core->mac[timer->delay_reg] & - E1000_EITR_INTERVAL) >> 2; - int64_t delay_ns = (int64_t)interval * timer->delay_resolution_ns; + uint32_t eitr = timer->core->mac[timer->delay_reg]; - igb_intrmgr_arm_timer(timer, delay_ns); + if (eitr != 0) { + uint32_t interval = (eitr & E1000_EITR_INTERVAL) >> 2; + int64_t delay_ns = (int64_t)interval * timer->delay_resolution_ns; + + igb_intrmgr_arm_timer(timer, delay_ns); + } } static void @@ -168,16 +171,7 @@ igb_intmgr_timer_resume(IGBIntrDelayTimer *timer) } static void -igb_intrmgr_on_msix_throttling_timer(void *opaque) -{ - IGBIntrDelayTimer *timer = opaque; - int idx = timer - &timer->core->eitr[0]; - - timer->running = false; - - trace_e1000e_irq_msix_notify_postponed_vec(idx); - igb_msix_notify(timer->core, idx); -} +igb_intrmgr_on_msix_throttling_timer(void *opaque); static void igb_intrmgr_initialize_all_timers(IGBCore *core, bool create) @@ -2253,9 +2247,7 @@ igb_postpone_interrupt(IGBIntrDelayTimer *timer) return true; } - if (timer->core->mac[timer->delay_reg] != 0) { - igb_intrmgr_rearm_timer(timer); - } + igb_intrmgr_rearm_timer(timer); return false; } @@ -2279,6 +2271,30 @@ static void igb_send_msix(IGBCore *core, uint32_t causes) } } +static void +igb_intrmgr_on_msix_throttling_timer(void *opaque) +{ + IGBIntrDelayTimer *timer = opaque; + IGBCore *core = timer->core; + int vector = timer - &core->eitr[0]; + uint32_t causes; + + timer->running = false; + + causes = core->mac[EICR] & core->mac[EIMS]; + if (causes & BIT(vector)) { + /* + * The moderation counter is loaded with interval value whenever the + * interrupt is signaled. This includes when the interrupt is signaled + * by the counter reaching 0. + */ + igb_intrmgr_rearm_timer(timer); + + trace_e1000e_irq_msix_notify_postponed_vec(vector); + igb_msix_notify(core, vector); + } +} + static inline void igb_fix_icr_asserted(IGBCore *core) { From patchwork Fri Apr 11 04:31:28 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Nicholas Piggin X-Patchwork-Id: 14047541 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id EBF9AC36010 for ; Fri, 11 Apr 2025 04:33:04 +0000 (UTC) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1u363u-0004qh-W3; Fri, 11 Apr 2025 00:32:19 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1u363t-0004qO-4l for qemu-devel@nongnu.org; Fri, 11 Apr 2025 00:32:17 -0400 Received: from mail-pl1-x62b.google.com ([2607:f8b0:4864:20::62b]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1u363r-0007cE-LG for qemu-devel@nongnu.org; Fri, 11 Apr 2025 00:32:16 -0400 Received: by mail-pl1-x62b.google.com with SMTP id d9443c01a7336-2264aefc45dso22669095ad.0 for ; Thu, 10 Apr 2025 21:32:15 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1744345934; x=1744950734; darn=nongnu.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=mcgWH2x0gAyjXMufV1B2NOlfCFMvX5UXpeLLJX0H558=; b=OJgh/AbCjYG+1umPSDll0VldZN9yoH8SnANkxyQhGughfBDbL5aCGBHRy0xLMYoekj 9vPW6+4oqkXYS9/yh4tZV8M6qj1S2GAbTVTx0TaRSRzPqQuAjQs2cW6jxyWtEIqhLoC3 zcGU6tlZ1FdLjt/Lw8DQvXw6H+9Fxl28SdcCZnI1nVGw9pPgCszo373YxyGqgTajnEln WJICMJKXwHWptPetbXFFMxgYCP681ZNWJ7M7amu21WTtS02Q4u1awLjO/tJh/zzREdbe rGRr+Eul95JOAQdWwgdu7s1jJeWj9ssl210dZF8U+DtoN0ExGVfkSEpgWiT+jm/mKrOF XErw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1744345934; x=1744950734; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=mcgWH2x0gAyjXMufV1B2NOlfCFMvX5UXpeLLJX0H558=; b=dT2HEekLK1seOz1sb45cRCMzZUMCAsTGXj964tkLOh9x8HxMmKQP4dAG+EImZFyYA0 zODpVaBquwI3Q141C8IPWA8F1C09LFniWI1eDMULs4+PlagQb47qAS0Y5eaFTIjOouGz ZpRWujw0csmX/iaDhj0wXvDvU2XOQqE6AEUVxiUTr5Qbo712AreLswx9eJ5/FjaixIUy 0Xk0Z4bPMVYpbOhtVc8nxPzhFvHPAwa5T46wWvDaBwK6BYcX4J0U/Jh6ZMCmWXWUqwPy RfJSXJBBFnep4gQ9OfqZMFWq/Y3T177H0nrdH50Y1YlubQhT4Bf+P7s/7ZAIrw3V7bfH M0GA== X-Forwarded-Encrypted: i=1; AJvYcCXSRmRxJw2h9mwjiaf6qMjl9xqz1sohMzvsdoFF1itOQaW3GRTcAn8aGxTqbvAkexZjR0Y8EH3fy1ib@nongnu.org X-Gm-Message-State: AOJu0Yx2Lu3krg0vCocUX/IL93/ngEdTDrJmCbzeczHXHzOIzmUD+/nI Zsv1z55MvhP/5YxnKF9gT0jFFNRYB1ckWPUW55zlB0JIue1jlAnd X-Gm-Gg: ASbGnct8aWOcxzyVA9yOzLAGZksNnU+YooX+JoJyCgZKV2w8IX7kSDv+mrNcRr/nHoB 0d33DAYepqR+3/R1PJKWCD6J9Ah7f/Ekm8SA+CcsKUdZezdPWNyYqoZwZ3R19SYhWnqfheDTfMT soXAk4p2+co0l7/oh9/tszBLzRiTx1775su8FdhkrywiyZCQS7ZsXFDEn4jYxvnEP3JVFYJtDHJ VBONAGukUe6kiDUi48qKmgFnT6WjLGCEPkcbsz6+96udDu3UL74BNAk9sUw6OFqw7tI9WxrlXQ4 PdYvNjST7tLCnV6FT6BXfmY9ueoCg0FIJf/1MbA2RldT+PCLpnXca8M= X-Google-Smtp-Source: AGHT+IHq/k0DRaOYU1Gs2Ofnj69VHaktdTpevJkZUvSXAlauomL2AgIkD9W05Tu9oe/R09tiecI9rg== X-Received: by 2002:a17:903:1c7:b0:220:e5be:29c7 with SMTP id d9443c01a7336-22bea4f180fmr22059705ad.39.1744345933977; Thu, 10 Apr 2025 21:32:13 -0700 (PDT) Received: from wheely.local0.net ([220.253.99.94]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-22ac7b64906sm39361625ad.48.2025.04.10.21.32.10 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 10 Apr 2025 21:32:13 -0700 (PDT) From: Nicholas Piggin To: Akihiko Odaki Cc: Nicholas Piggin , qemu-devel@nongnu.org, Dmitry Fleytman , Jason Wang , Sriram Yagnaraman , Fabiano Rosas , Laurent Vivier , Paolo Bonzini Subject: [PATCH v2 8/8] qtest/e1000e|igb: Test interrupt throttling in multiple_transfers test Date: Fri, 11 Apr 2025 14:31:28 +1000 Message-ID: <20250411043128.201289-9-npiggin@gmail.com> X-Mailer: git-send-email 2.47.1 In-Reply-To: <20250411043128.201289-1-npiggin@gmail.com> References: <20250411043128.201289-1-npiggin@gmail.com> MIME-Version: 1.0 Received-SPF: pass client-ip=2607:f8b0:4864:20::62b; envelope-from=npiggin@gmail.com; helo=mail-pl1-x62b.google.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, FREEMAIL_FROM=0.001, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+qemu-devel=archiver.kernel.org@nongnu.org Sender: qemu-devel-bounces+qemu-devel=archiver.kernel.org@nongnu.org Enable interrupt throtling on one of the two queue interrupts used in the multiple_transfers test, to improve coverage. The number of interrupts for the e1000e test is reduced because it has a long minimum throttling delay so without reducing iterations throttling adds about 40s to the test runtime. Signed-off-by: Nicholas Piggin --- tests/qtest/e1000e-test.c | 6 +++--- tests/qtest/igb-test.c | 4 ++++ 2 files changed, 7 insertions(+), 3 deletions(-) diff --git a/tests/qtest/e1000e-test.c b/tests/qtest/e1000e-test.c index a538c72cc84..645b31127f0 100644 --- a/tests/qtest/e1000e-test.c +++ b/tests/qtest/e1000e-test.c @@ -181,7 +181,7 @@ static void test_e1000e_rx(void *obj, void *data, QGuestAllocator * alloc) static void test_e1000e_multiple_transfers(void *obj, void *data, QGuestAllocator *alloc) { - static const long iterations = 4 * 1024; + static const long iterations = 1 * 1024; long i; QE1000E_PCI *e1000e = obj; @@ -194,8 +194,8 @@ static void test_e1000e_multiple_transfers(void *obj, void *data, return; } - /* Clear EITR because buggy QEMU throttle timer causes superfluous irqs */ - e1000e_macreg_write(d, E1000_EITR + E1000E_RX0_MSG_ID * 4, 0); + /* Use EITR for one irq and disable it for the other, for testing */ + e1000e_macreg_write(d, E1000_EITR + E1000E_RX0_MSG_ID * 4, 500); e1000e_macreg_write(d, E1000_EITR + E1000E_TX0_MSG_ID * 4, 0); for (i = 0; i < iterations; i++) { diff --git a/tests/qtest/igb-test.c b/tests/qtest/igb-test.c index 12cdd8b498a..c1877a77be4 100644 --- a/tests/qtest/igb-test.c +++ b/tests/qtest/igb-test.c @@ -198,6 +198,10 @@ static void test_igb_multiple_transfers(void *obj, void *data, return; } + /* Use EITR for one irq and disable it for the other, for testing */ + e1000e_macreg_write(d, E1000_EITR(E1000E_RX0_MSG_ID), 0); + e1000e_macreg_write(d, E1000_EITR(E1000E_TX0_MSG_ID), 10 << 2); /* 10us */ + for (i = 0; i < iterations; i++) { igb_send_verify(d, data, alloc); igb_receive_verify(d, data, alloc);