From patchwork Sun Oct 29 18:35:55 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Mirsad Todorovac X-Patchwork-Id: 159386 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a59:d641:0:b0:403:3b70:6f57 with SMTP id cy1csp1811124vqb; Sun, 29 Oct 2023 11:42:52 -0700 (PDT) X-Google-Smtp-Source: AGHT+IHUgwh5XP6mkNMg2th8aCX2h0iCdXcGIBchvuE9RjF7rhelLTVRK9rZlUY7QkWq3BE0sbPR X-Received: by 2002:a05:6a20:3d03:b0:128:ffb7:dcfe with SMTP id y3-20020a056a203d0300b00128ffb7dcfemr10640624pzi.1.1698604972307; Sun, 29 Oct 2023 11:42:52 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1698604972; cv=none; d=google.com; s=arc-20160816; b=n+3BNaTHwMlczsKV4PUvD+YA7SREIpms00lubEBBjAfpq5fsboFHFs9VvmktMqX4S4 MhvX6zy4+llBfvdssHtWBPh87Oi6Zhc8b6JuBu/e3SjS/7nb9Ty2ThyQGVbL0ORwLQGE rGdYeP1L24/Xi9VQUVXGrAAbSh+y873DMR79JeJ12MrY+WntDHwzChrk+O1JFUtndVFh CQjO7w9En0SgO4XY9iUk7+OvUpc92hGsPZumDzrXFm/xBrim9x5aSoiBgijZjAvM7FXc dmgITJvPqOfWrV9e/Q2FzJtY8+8/2UAaizaV2f7UGW7erZTeSzbEUjv+AjqNEhLgxdOz yGNQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :message-id:date:subject:cc:to:from:dkim-signature:dkim-signature; bh=3afuObRu8VX8JaQE0V+kvXxqdMnQ7k1ZarAYGbccSzc=; fh=SsNJs69sMYlYTeWQYB3Y6uFVnk1BYEiSEalBcmc5mfg=; b=ErWghm8IIEGlimZuva8C/HFMLLaBYeHIGludQ4gckCc8UbYW8a7fWc1ulXGhKPfD/H +iuzx6JNbCQpCigsfxZcMd2/nr0Lg+bQCZtSFmdA5EaNKJucJVKK+Bpk+IhRKCL241Yg iPEfPxjIXgfQ5tSccMGMFOhChTAFc7bhxvFQdTefcIZv+hxq0tUbdfnFtWqDx5fXPXc7 gseQVSavZ4eAv6rAl8WU/quLmUh4xy+ZKXv+0A276GbYoTQbsN411O0IN9fbW/170VXK O5WXVEJnaFSzBqBJ0GMo1+Th4fxsZqlgxyuFuu/AZH/3PcsoAq2lABdaaR7EvKwQ533T DHLQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=fail header.i=@alu.unizg.hr header.s=mail header.b=y877EDNJ; dkim=fail header.i=@alu.unizg.hr header.s=mail header.b=HsvHeQ7y; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.34 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=alu.unizg.hr Received: from howler.vger.email (howler.vger.email. [23.128.96.34]) by mx.google.com with ESMTPS id q26-20020a65685a000000b005b9150f39b7si3851694pgt.427.2023.10.29.11.42.52 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 29 Oct 2023 11:42:52 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.34 as permitted sender) client-ip=23.128.96.34; Authentication-Results: mx.google.com; dkim=fail header.i=@alu.unizg.hr header.s=mail header.b=y877EDNJ; dkim=fail header.i=@alu.unizg.hr header.s=mail header.b=HsvHeQ7y; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.34 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=alu.unizg.hr Received: from out1.vger.email (depot.vger.email [IPv6:2620:137:e000::3:0]) by howler.vger.email (Postfix) with ESMTP id 6EFCB8062281; Sun, 29 Oct 2023 11:42:45 -0700 (PDT) X-Virus-Status: Clean X-Virus-Scanned: clamav-milter 0.103.10 at howler.vger.email Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S229778AbjJ2Sm0 (ORCPT + 30 others); Sun, 29 Oct 2023 14:42:26 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:52922 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S229529AbjJ2SmX (ORCPT ); Sun, 29 Oct 2023 14:42:23 -0400 Received: from domac.alu.hr (domac.alu.unizg.hr [161.53.235.3]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id BB2BDBC; Sun, 29 Oct 2023 11:42:19 -0700 (PDT) Received: from localhost (localhost [127.0.0.1]) by domac.alu.hr (Postfix) with ESMTP id 5843560187; Sun, 29 Oct 2023 19:42:17 +0100 (CET) DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=alu.unizg.hr; s=mail; t=1698604937; bh=aGnuUMcaiZKyu6bxd0gchGWjjPRuLHhYcfTW+nYpD4s=; h=From:To:Cc:Subject:Date:From; b=y877EDNJQzI9JIXiUlWCazdj+b4MMqsdq0bFqrO2rUhZ03UL4zD7xLuJhC1O8qrLs nch/gc7UfcU7LnuAJA6glsXD+vQS/jYEGDFOo6SJxrQ957REI6/NcD3S3F5qhQxcgT fbvclOGxQhpH2+Ut8LfTHIa1HA5dSx6o+AfGWPTFQVO1BWaNlf5P+tFfzhGU3UXN2r Cny24dOrz96lGwnGEgXD+gT2W2WoEugXWiNC4Da9vlVSwv0lrSSOsQrf42vNLlQxkg PzX6/xNjvqp4bL86aISd3ZrY4ymNlQazFQuxOBu6zc3WLUcFC+cYdHpeso+awcVkS6 orZpeMMpeaA5w== X-Virus-Scanned: Debian amavisd-new at domac.alu.hr Received: from domac.alu.hr ([127.0.0.1]) by localhost (domac.alu.hr [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id b2ku-x8BoIkh; Sun, 29 Oct 2023 19:42:14 +0100 (CET) Received: from defiant.home (78-3-40-247.adsl.net.t-com.hr [78.3.40.247]) by domac.alu.hr (Postfix) with ESMTPSA id 7982E60173; Sun, 29 Oct 2023 19:42:12 +0100 (CET) DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=alu.unizg.hr; s=mail; t=1698604934; bh=aGnuUMcaiZKyu6bxd0gchGWjjPRuLHhYcfTW+nYpD4s=; h=From:To:Cc:Subject:Date:From; b=HsvHeQ7yq9Szwl4hvaxE8a4VLqpAv0B+NaVAGWA11ZuW2w7Bmg0Dy5rZBa3R+jyxn zC2u7Pglbh1aMUD5V5hNWPbIa+4kICgNACg8fKUiVYloqyf/zfkXLn+imEsT4/ZRoH k2c+ZjIR5hUO1AbAuFfZpB2OpM3wJA7bgZNiXEITVGXgFcue3488iO6KrZKK+CLBle 5WVh3ewa0gtEGUAncXgQVip5tU8acc9ZlBliH2TwOKtRSU9DxX2mIdNUFBXZSTVVyd +X3OlgYYSpsRbmmxsed4/+VPgKKYGO5QK1iPF+xR5zEtE+dEt58+l3Yic5o/wGlX04 l3RDk8wdD5Ogw== From: Mirsad Goran Todorovac To: Jason Gunthorpe , Joerg Roedel , Lu Baolu , iommu@lists.linux.dev, linux-kernel@vger.kernel.org, netdev@vger.kernel.org Cc: Joerg Roedel , Will Deacon , Robin Murphy , Heiner Kallweit , nic_swsd@realtek.com, "David S. Miller" , Eric Dumazet , Jakub Kicinski , Paolo Abeni , Mirsad Goran Todorovac , Marco Elver Subject: [PATCH v5 1/7] r8169: Add r8169_mac_ocp_(write|modify)_seq helpers to reduce spinlock contention Date: Sun, 29 Oct 2023 19:35:55 +0100 Message-Id: <20231029183600.451694-1-mirsad.todorovac@alu.unizg.hr> X-Mailer: git-send-email 2.34.1 MIME-Version: 1.0 X-Spam-Status: No, score=-0.6 required=5.0 tests=DKIM_INVALID,DKIM_SIGNED, HEADER_FROM_DIFFERENT_DOMAINS,MAILING_LIST_MULTI,SPF_HELO_NONE, SPF_PASS autolearn=unavailable autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on howler.vger.email Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org X-Greylist: Sender passed SPF test, not delayed by milter-greylist-4.6.4 (howler.vger.email [0.0.0.0]); Sun, 29 Oct 2023 11:42:45 -0700 (PDT) X-getmail-retrieved-from-mailbox: INBOX X-GMAIL-THRID: 1781116407350864996 X-GMAIL-MSGID: 1781116407350864996 A pair of new helpers r8168_mac_ocp_write_seq() and r8168_mac_ocp_modify_seq() are introduced. The motivation for these helpers was the locking overhead of 130 consecutive r8168_mac_ocp_write() calls in the RTL8411b reset after the NIC gets confused if the PHY is powered-down. To quote Heiner: On RTL8411b the RX unit gets confused if the PHY is powered-down. This was reported in [0] and confirmed by Realtek. Realtek provided a sequence to fix the RX unit after PHY wakeup. A series of about 130 r8168_mac_ocp_write() calls is performed to program the RTL registers for recovery, each doing an expensive spin_lock_irqsave() and spin_unlock_irqrestore(). Each mac ocp write is made of: static void __r8168_mac_ocp_write(struct rtl8169_private *tp, u32 reg, u32 data) { if (rtl_ocp_reg_failure(reg)) return; RTL_W32(tp, OCPDR, OCPAR_FLAG | (reg << 15) | data); } static void r8168_mac_ocp_write(struct rtl8169_private *tp, u32 reg, u32 data) { unsigned long flags; raw_spin_lock_irqsave(&tp->mac_ocp_lock, flags); __r8168_mac_ocp_write(tp, reg, data); raw_spin_unlock_irqrestore(&tp->mac_ocp_lock, flags); } Register programming is done through RTL_W32() macro which expands into #define RTL_W32(tp, reg, val32) writel((val32), tp->mmio_addr + (reg)) which is further (on Alpha): extern inline void writel(u32 b, volatile void __iomem *addr) { mb(); __raw_writel(b, addr); } or on i386/x86_64: #define build_mmio_write(name, size, type, reg, barrier) \ static inline void name(type val, volatile void __iomem *addr) \ { asm volatile("mov" size " %0,%1": :reg (val), \ "m" (*(volatile type __force *)addr) barrier); } build_mmio_write(writel, "l", unsigned int, "r", :"memory") This obviously involves iat least a compiler barrier. mb() expands into something like this i.e. on x86_64: #define mb() asm volatile("lock; addl $0,0(%%esp)" ::: "memory") This means a whole lot of memory bus stalls: for spin_lock_irqsave(), memory barrier, writel(), and spin_unlock_irqrestore(). With about 130 of these sequential calls to r8168_mac_ocp_write() this looks like a lock storm that will stall all of the cores and CPUs on the same memory controller for certain time I/O takes to finish. In a sequential case of RTL register programming, the writes to RTL registers can be coalesced under a same raw spinlock. This can dramatically decrease the number of bus stalls in a multicore or multi-CPU system. Macro helpers r8168_mac_ocp_write_seq() and r8168_mac_ocp_modify_seq() are provided to reduce lock contention: static void rtl_hw_start_8411_2(struct rtl8169_private *tp) { ... /* The following Realtek-provided magic fixes an issue with the RX unit * getting confused after the PHY having been powered-down. */ static const struct recover_8411b_info init_zero_seq[] = { { 0xFC28, 0x0000 }, { 0xFC2A, 0x0000 }, { 0xFC2C, 0x0000 }, ... }; ... r8168_mac_ocp_write_seq(tp, init_zero_seq); ... } The hex data is preserved intact through s/r8168_mac_ocp_write[(]tp,/{ / and s/[)];/ },/ functions that only changed the function names and the ending of the line, so the actual hex data is unchanged. To repeat, the reason for the introduction of the original commit was to enable recovery of the RX unit on the RTL8411b which was confused by the powered-down PHY. This sequence of r8168_mac_ocp_write() calls amplifies the problem into a series of about 500+ memory bus locks, most waiting for the main memory read, modify and write under a LOCK. The memory barrier in RTL_W32 should suffice for the programming sequence to reach RTL NIC registers. [0] https://bugzilla.redhat.com/show_bug.cgi?id=1692075 Fixes: fe4e8db0392a6 ("r8169: fix issue with confused RX unit after PHY power-down on RTL8411b") Fixes: 91c8643578a21 ("r8169: use spinlock to protect mac ocp register access") Fixes: d6c36cbc5e533 ("r8169: Use a raw_spinlock_t for the register locks.") Cc: Heiner Kallweit Cc: Marco Elver Cc: nic_swsd@realtek.com Cc: "David S. Miller" Cc: Eric Dumazet Cc: Jakub Kicinski Cc: Paolo Abeni Cc: netdev@vger.kernel.org Cc: linux-kernel@vger.kernel.org Link: https://lore.kernel.org/lkml/20231028005153.2180411-1-mirsad.todorovac@alu.unizg.hr/ Link: https://lore.kernel.org/lkml/20231028110459.2644926-1-mirsad.todorovac@alu.unizg.hr/ Signed-off-by: Mirsad Goran Todorovac --- v5: added unlocked primitives to allow mac ocs modify grouping applied coalescing of mac ocp writes/modifies for 8168ep and 8117 some formatting fixes to please checkpatch.pl v4: fixed complaints as advised by Heiner and checkpatch.pl split the patch into five sections to be more easily manipulated and reviewed introduced r8168_mac_ocp_write_seq() applied coalescing of mac ocp writes/modifies for 8168H, 8125 and 8125B v3: removed register/mask pair array sentinels, so using ARRAY_SIZE(). avoided duplication of RTL_W32() call code as advised by Heiner. drivers/net/ethernet/realtek/r8169_main.c | 71 +++++++++++++++++++++-- 1 file changed, 66 insertions(+), 5 deletions(-) diff --git a/drivers/net/ethernet/realtek/r8169_main.c b/drivers/net/ethernet/realtek/r8169_main.c index 361b90007148..da1f5d1b4fd5 100644 --- a/drivers/net/ethernet/realtek/r8169_main.c +++ b/drivers/net/ethernet/realtek/r8169_main.c @@ -888,7 +888,7 @@ static int r8168_phy_ocp_read(struct rtl8169_private *tp, u32 reg) (RTL_R32(tp, GPHY_OCP) & 0xffff) : -ETIMEDOUT; } -static void __r8168_mac_ocp_write(struct rtl8169_private *tp, u32 reg, u32 data) +static inline void __r8168_mac_ocp_write(struct rtl8169_private *tp, u32 reg, u32 data) { if (rtl_ocp_reg_failure(reg)) return; @@ -905,7 +905,7 @@ static void r8168_mac_ocp_write(struct rtl8169_private *tp, u32 reg, u32 data) raw_spin_unlock_irqrestore(&tp->mac_ocp_lock, flags); } -static u16 __r8168_mac_ocp_read(struct rtl8169_private *tp, u32 reg) +static inline u16 __r8168_mac_ocp_read(struct rtl8169_private *tp, u32 reg) { if (rtl_ocp_reg_failure(reg)) return 0; @@ -927,18 +927,79 @@ static u16 r8168_mac_ocp_read(struct rtl8169_private *tp, u32 reg) return val; } +static inline void __r8168_mac_ocp_modify(struct rtl8169_private *tp, u32 reg, u16 mask, + u16 set) +{ + u16 data; + + data = __r8168_mac_ocp_read(tp, reg); + __r8168_mac_ocp_write(tp, reg, (data & ~mask) | set); +} + static void r8168_mac_ocp_modify(struct rtl8169_private *tp, u32 reg, u16 mask, u16 set) { unsigned long flags; - u16 data; raw_spin_lock_irqsave(&tp->mac_ocp_lock, flags); - data = __r8168_mac_ocp_read(tp, reg); - __r8168_mac_ocp_write(tp, reg, (data & ~mask) | set); + __r8168_mac_ocp_modify(tp, reg, mask, set); raw_spin_unlock_irqrestore(&tp->mac_ocp_lock, flags); } +struct e_info_regdata { + u32 reg; + u32 data; +}; + +struct e_info_regmaskset { + u32 reg; + u16 mask; + u16 set; +}; + +static void __r8168_mac_ocp_write_seqlen(struct rtl8169_private *tp, + const struct e_info_regdata *array, int len) +{ + struct e_info_regdata const *p; + + for (p = array; len--; p++) + __r8168_mac_ocp_write(tp, p->reg, p->data); +} + +static void r8168_mac_ocp_write_seqlen(struct rtl8169_private *tp, + const struct e_info_regdata *array, int len) +{ + unsigned long flags; + + raw_spin_lock_irqsave(&tp->mac_ocp_lock, flags); + __r8168_mac_ocp_write_seqlen(tp, array, len); + raw_spin_unlock_irqrestore(&tp->mac_ocp_lock, flags); +} + +static void __r8168_mac_ocp_modify_seqlen(struct rtl8169_private *tp, + const struct e_info_regmaskset *array, int len) +{ + struct e_info_regmaskset const *p; + + for (p = array; len--; p++) + __r8168_mac_ocp_modify(tp, p->reg, p->mask, p->set); +} + +static void r8168_mac_ocp_modify_seqlen(struct rtl8169_private *tp, + const struct e_info_regmaskset *array, int len) +{ + unsigned long flags; + + raw_spin_lock_irqsave(&tp->mac_ocp_lock, flags); + __r8168_mac_ocp_modify_seqlen(tp, array, len); + raw_spin_unlock_irqrestore(&tp->mac_ocp_lock, flags); +} + +#define r8168_mac_ocp_write_seq(tp, a) r8168_mac_ocp_write_seqlen(tp, a, ARRAY_SIZE(a)) +#define r8168_mac_ocp_modify_seq(tp, a) r8168_mac_ocp_modify_seqlen(tp, a, ARRAY_SIZE(a)) +#define __r8168_mac_ocp_write_seq(tp, a) __r8168_mac_ocp_write_seqlen(tp, a, ARRAY_SIZE(a)) +#define __r8168_mac_ocp_modify_seq(tp, a) __r8168_mac_ocp_modify_seqlen(tp, a, ARRAY_SIZE(a)) + /* Work around a hw issue with RTL8168g PHY, the quirk disables * PHY MCU interrupts before PHY power-down. */ From patchwork Sun Oct 29 18:35:57 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Mirsad Todorovac X-Patchwork-Id: 159387 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a59:d641:0:b0:403:3b70:6f57 with SMTP id cy1csp1811201vqb; Sun, 29 Oct 2023 11:43:07 -0700 (PDT) X-Google-Smtp-Source: AGHT+IEZZqFc5Q/NSaubQL79dDVpEE+vq7/Td73aiDEZo6AkSrzgLy4pCuUF5PQeEha0r05uxf1N X-Received: by 2002:a05:6602:14cc:b0:783:5209:c01 with SMTP id b12-20020a05660214cc00b0078352090c01mr11294417iow.17.1698604986958; Sun, 29 Oct 2023 11:43:06 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1698604986; cv=none; d=google.com; s=arc-20160816; b=EQGm+30+h38E2/uD30nCbEJqQpTWp36zytWRlznvIPhUJIbRwd/nSJsAeTf0rCJGQy xrD+XkMKW19KC/upiTtBHg+xJjDu4nhQikd24hWr9RGCu8hMQTqSkvSeL9he0mD0/7tI ino3v1Mf9ewS9j2EisZ0kjihyMOzo51+/9F0gNQYXVqvQ0zwfqXzwVLvh0xFVG+lzc2o 2wg2VaABqiu54Dou+Y++Caf1nz5vy+eYxuDECLo6j+JloOuJBDF9wACpkDEUl0IKWJTh y++ymWL+OMBdIhog2wOtLV+DK0BNry5pxE9j4vrLeBMolz5YAyUVeTGJAGPPRk/8vZvH ubhw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :references:in-reply-to:message-id:date:subject:cc:to:from :dkim-signature:dkim-signature; bh=xEImF0w329nQ/gq64T5Yb6fX2zBL6q6Rdj4mZ3BilZM=; fh=SsNJs69sMYlYTeWQYB3Y6uFVnk1BYEiSEalBcmc5mfg=; b=qehqQhc+pJHZo29VtjHwtPg2Ka3xv3nA3ayWqFqS393NH11NtCNNEgZjGh2fvgcKsP ZTeb2SiiwBYu5csFpsAupU5/S7h+L+j5gj0/JNAedmGKuQd1Qxkui/T+b6FS7/tHyXDJ 028Kk/weW8xkeglAHtuW5e7aSsDnzKZYA+S2R5xX8btR3GZ/rtDQW3pE8MzyT317jC3o qQSxYeqiQ5ZPpS8SRzJJgbi78mNULo8OSrsnr1GFnsF/n4qWj1MX9gcP4V52U5ACLgk2 ztlFlnuxYHTKnSOcSCQ0YnYFdx7vd9P9Mn99MSUFWgKIv78GbhrVqyVOVX/AepQxrnUI thVg== ARC-Authentication-Results: i=1; mx.google.com; dkim=fail header.i=@alu.unizg.hr header.s=mail header.b=cKsg9u6N; dkim=fail header.i=@alu.unizg.hr header.s=mail header.b=yttPFTlD; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::3:7 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=alu.unizg.hr Received: from snail.vger.email (snail.vger.email. [2620:137:e000::3:7]) by mx.google.com with ESMTPS id z125-20020a633383000000b005b92d41764dsi3889184pgz.794.2023.10.29.11.43.06 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 29 Oct 2023 11:43:06 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::3:7 as permitted sender) client-ip=2620:137:e000::3:7; Authentication-Results: mx.google.com; dkim=fail header.i=@alu.unizg.hr header.s=mail header.b=cKsg9u6N; dkim=fail header.i=@alu.unizg.hr header.s=mail header.b=yttPFTlD; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::3:7 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=alu.unizg.hr Received: from out1.vger.email (depot.vger.email [IPv6:2620:137:e000::3:0]) by snail.vger.email (Postfix) with ESMTP id 0B3C480A266F; Sun, 29 Oct 2023 11:43:06 -0700 (PDT) X-Virus-Status: Clean X-Virus-Scanned: clamav-milter 0.103.10 at snail.vger.email Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S229529AbjJ2SnC (ORCPT + 30 others); Sun, 29 Oct 2023 14:43:02 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:37940 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S230288AbjJ2SnA (ORCPT ); Sun, 29 Oct 2023 14:43:00 -0400 Received: from domac.alu.hr (domac.alu.unizg.hr [161.53.235.3]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id F26B8F1; Sun, 29 Oct 2023 11:42:53 -0700 (PDT) Received: from localhost (localhost [127.0.0.1]) by domac.alu.hr (Postfix) with ESMTP id 67A5660182; Sun, 29 Oct 2023 19:42:52 +0100 (CET) DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=alu.unizg.hr; s=mail; t=1698604972; bh=B8EyPD13t0g4ymcG9S08wKsseiSx/0aDmoV19bBvwDc=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=cKsg9u6NH2Iai9IcC6r9Yw5jWWhcb6csGeQafdHi/p1i1+/nimcnyYMCFSiVYJL+J 4Yr5BwZe3Lx3hEKXzQmjlY8AtDLWBOt8j7N7W6zQ7mkjf1qb2hLG3fnUlPyU3WjIVg 9FzK1bJFNzgfuLHYhYH1IHrgGo6mo2Focv/f/jE1wNYy8PfnKxroO6QMyxZvFrTidA HU8L2QiN703KC72OB9M/03mEvG0hOy6ziqlSgRim1mhJTDpdk3RC51j+RLNUX8DPS2 9k0XiR9j6zPjEy9sloumBNIa1V84UpOZq264iwTlPIFlqZHzngFIF6GlTofKA4hglW pquFESRDYFhVA== X-Virus-Scanned: Debian amavisd-new at domac.alu.hr Received: from domac.alu.hr ([127.0.0.1]) by localhost (domac.alu.hr [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id wLjCM5r6q6f3; Sun, 29 Oct 2023 19:42:49 +0100 (CET) Received: from defiant.home (78-3-40-247.adsl.net.t-com.hr [78.3.40.247]) by domac.alu.hr (Postfix) with ESMTPSA id 5C64C60173; Sun, 29 Oct 2023 19:42:49 +0100 (CET) DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=alu.unizg.hr; s=mail; t=1698604969; bh=B8EyPD13t0g4ymcG9S08wKsseiSx/0aDmoV19bBvwDc=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=yttPFTlD3pLdXVG2omdqsYw0aZSZioMM62UzKHraLYmh0CDCkpex9C9kMfh63gory wy8RHw4ROSL3+DlO+u5jfOgrVikc5dNdY/jp5naOBFVai3kUVnZ3OO+d/EmxvPqkBQ UhApBSkc7S84pSWlw5xh4w53tvZvy0mR8LMPKifaXUts/d9J2bu5dOKwn9oTNOQi8N fG00ZLbBM5/yWYvXYnt2zj/rs6wNoNlc81iSQDE6cNd9+qvSPEd8xvmA6nsESBK/sX WhhQt521Nny2hvT6PWVu365n/jOr6Bz+pU/M8XiyyTMvaZ5wNHFkAXN+69POERhkyM /zxRHxc7LMX2Q== From: Mirsad Goran Todorovac To: Jason Gunthorpe , Joerg Roedel , Lu Baolu , iommu@lists.linux.dev, linux-kernel@vger.kernel.org, netdev@vger.kernel.org Cc: Joerg Roedel , Will Deacon , Robin Murphy , Heiner Kallweit , nic_swsd@realtek.com, "David S. Miller" , Eric Dumazet , Jakub Kicinski , Paolo Abeni , Mirsad Goran Todorovac , Marco Elver Subject: [PATCH v5 2/7] r8169: Coalesce RTL8411b PHY power-down recovery calls to reduce spinlock contention Date: Sun, 29 Oct 2023 19:35:57 +0100 Message-Id: <20231029183600.451694-2-mirsad.todorovac@alu.unizg.hr> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20231029183600.451694-1-mirsad.todorovac@alu.unizg.hr> References: <20231029183600.451694-1-mirsad.todorovac@alu.unizg.hr> MIME-Version: 1.0 X-Spam-Status: No, score=-2.0 required=5.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,RCVD_IN_DNSWL_BLOCKED,SPF_HELO_NONE,SPF_PASS autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org X-Greylist: Sender passed SPF test, not delayed by milter-greylist-4.6.4 (snail.vger.email [0.0.0.0]); Sun, 29 Oct 2023 11:43:06 -0700 (PDT) X-getmail-retrieved-from-mailbox: INBOX X-GMAIL-THRID: 1781116422988672046 X-GMAIL-MSGID: 1781116422988672046 On RTL8411b the RX unit gets confused if the PHY is powered-down. This was reported in [0] and confirmed by Realtek. Realtek provided a sequence to fix the RX unit after PHY wakeup. A series of about 130 r8168_mac_ocp_write() calls is performed to program the RTL registers for recovery. With about 130 of these sequential calls to r8168_mac_ocp_write() this looks like a lock storm that will stall all of the cores and CPUs on the same memory controller for certain time I/O takes to finish. In a sequential case of RTL register programming, a sequence of writes to the RTL registers can be coalesced under a same raw spinlock. This can dramatically decrease the number of bus stalls in a multicore or multi-CPU system: static void rtl_hw_start_8411_2(struct rtl8169_private *tp) { ... /* The following Realtek-provided magic fixes an issue with the RX unit * getting confused after the PHY having been powered-down. */ static const struct recover_8411b_info init_zero_seq[] = { { 0xFC28, 0x0000 }, { 0xFC2A, 0x0000 }, { 0xFC2C, 0x0000 }, ... }; static const struct recover_8411b_info recover_seq[] = { { 0xF800, 0xE008 }, { 0xF802, 0xE00A }, { 0xF804, 0xE00C }, ... }; static const struct recover_8411b_info final_seq[] = { { 0xFC2A, 0x0743 }, { 0xFC2C, 0x0801 }, { 0xFC2E, 0x0BE9 }, ... }; r8168_mac_ocp_write_seq(tp, init_zero_seq); mdelay(3); r8168_mac_ocp_write(tp, 0xFC26, 0x0000); r8168_mac_ocp_write_seq(tp, recover_seq); r8168_mac_ocp_write(tp, 0xFC26, 0x8000); r8168_mac_ocp_write_seq(tp, final_seq); } The hex data is preserved intact through s/r8168_mac_ocp_write[(]tp,/{ / and s/[)];/ },/ functions that only changed the function names and the ending of the line, so the actual hex data is unchanged. Note that the reason for the introduction of the original commit was to enable recovery of the RX unit on the RTL8411b which was confused by the powered-down PHY. This sequence of r8168_mac_ocp_write() calls amplifies the problem into a series of about 500+ memory bus locks, most waiting for the main MMIO memory read-modify-write under a LOCK. The memory barrier in RTL_W32 should suffice for the programming sequence to reach RTL NIC registers. [0] https://bugzilla.redhat.com/show_bug.cgi?id=1692075 Fixes: fe4e8db0392a6 ("r8169: fix issue with confused RX unit after PHY power-down on RTL8411b") Cc: Heiner Kallweit Cc: Marco Elver Cc: nic_swsd@realtek.com Cc: "David S. Miller" Cc: Eric Dumazet Cc: Jakub Kicinski Cc: Paolo Abeni Cc: netdev@vger.kernel.org Cc: linux-kernel@vger.kernel.org Link: https://lore.kernel.org/lkml/20231028005153.2180411-1-mirsad.todorovac@alu.unizg.hr/ Link: https://lore.kernel.org/lkml/20231028110459.2644926-1-mirsad.todorovac@alu.unizg.hr/ Signed-off-by: Mirsad Goran Todorovac --- v5: added unlocked primitives to allow mac ocs modify grouping applied coalescing of mac ocp writes/modifies for 8168ep and 8117 some formatting fixes to please checkpatch.pl v4: fixed complaints as advised by Heiner and checkpatch.pl split the patch into five sections to be more easily manipulated and reviewed introduced r8168_mac_ocp_write_seq() applied coalescing of mac ocp writes/modifies for 8168H, 8125 and 8125B v3: removed register/mask pair array sentinels, so using ARRAY_SIZE(). avoided duplication of RTL_W32() call code as advised by Heiner. drivers/net/ethernet/realtek/r8169_main.c | 173 ++++++---------------- 1 file changed, 46 insertions(+), 127 deletions(-) diff --git a/drivers/net/ethernet/realtek/r8169_main.c b/drivers/net/ethernet/realtek/r8169_main.c index da1f5d1b4fd5..f4a1d1a74b8b 100644 --- a/drivers/net/ethernet/realtek/r8169_main.c +++ b/drivers/net/ethernet/realtek/r8169_main.c @@ -3161,145 +3161,64 @@ static void rtl_hw_start_8411_2(struct rtl8169_private *tp) { 0x1d, 0x0000, 0x4000 }, }; - rtl_hw_start_8168g(tp); + static const struct e_info_regdata init_zero_seq[] = { + { 0xFC28, 0x0000 }, { 0xFC2A, 0x0000 }, { 0xFC2C, 0x0000 }, { 0xFC2E, 0x0000 }, + { 0xFC30, 0x0000 }, { 0xFC32, 0x0000 }, { 0xFC34, 0x0000 }, { 0xFC36, 0x0000 }, + }; + static const struct e_info_regdata recover_seq[] = { + { 0xF800, 0xE008 }, { 0xF802, 0xE00A }, { 0xF804, 0xE00C }, { 0xF806, 0xE00E }, + { 0xF808, 0xE027 }, { 0xF80A, 0xE04F }, { 0xF80C, 0xE05E }, { 0xF80E, 0xE065 }, + { 0xF810, 0xC602 }, { 0xF812, 0xBE00 }, { 0xF814, 0x0000 }, { 0xF816, 0xC502 }, + { 0xF818, 0xBD00 }, { 0xF81A, 0x074C }, { 0xF81C, 0xC302 }, { 0xF81E, 0xBB00 }, + { 0xF820, 0x080A }, { 0xF822, 0x6420 }, { 0xF824, 0x48C2 }, { 0xF826, 0x8C20 }, + { 0xF828, 0xC516 }, { 0xF82A, 0x64A4 }, { 0xF82C, 0x49C0 }, { 0xF82E, 0xF009 }, + { 0xF830, 0x74A2 }, { 0xF832, 0x8CA5 }, { 0xF834, 0x74A0 }, { 0xF836, 0xC50E }, + { 0xF838, 0x9CA2 }, { 0xF83A, 0x1C11 }, { 0xF83C, 0x9CA0 }, { 0xF83E, 0xE006 }, + { 0xF840, 0x74F8 }, { 0xF842, 0x48C4 }, { 0xF844, 0x8CF8 }, { 0xF846, 0xC404 }, + { 0xF848, 0xBC00 }, { 0xF84A, 0xC403 }, { 0xF84C, 0xBC00 }, { 0xF84E, 0x0BF2 }, + { 0xF850, 0x0C0A }, { 0xF852, 0xE434 }, { 0xF854, 0xD3C0 }, { 0xF856, 0x49D9 }, + { 0xF858, 0xF01F }, { 0xF85A, 0xC526 }, { 0xF85C, 0x64A5 }, { 0xF85E, 0x1400 }, + { 0xF860, 0xF007 }, { 0xF862, 0x0C01 }, { 0xF864, 0x8CA5 }, { 0xF866, 0x1C15 }, + { 0xF868, 0xC51B }, { 0xF86A, 0x9CA0 }, { 0xF86C, 0xE013 }, { 0xF86E, 0xC519 }, + { 0xF870, 0x74A0 }, { 0xF872, 0x48C4 }, { 0xF874, 0x8CA0 }, { 0xF876, 0xC516 }, + { 0xF878, 0x74A4 }, { 0xF87A, 0x48C8 }, { 0xF87C, 0x48CA }, { 0xF87E, 0x9CA4 }, + { 0xF880, 0xC512 }, { 0xF882, 0x1B00 }, { 0xF884, 0x9BA0 }, { 0xF886, 0x1B1C }, + { 0xF888, 0x483F }, { 0xF88A, 0x9BA2 }, { 0xF88C, 0x1B04 }, { 0xF88E, 0xC508 }, + { 0xF890, 0x9BA0 }, { 0xF892, 0xC505 }, { 0xF894, 0xBD00 }, { 0xF896, 0xC502 }, + { 0xF898, 0xBD00 }, { 0xF89A, 0x0300 }, { 0xF89C, 0x051E }, { 0xF89E, 0xE434 }, + { 0xF8A0, 0xE018 }, { 0xF8A2, 0xE092 }, { 0xF8A4, 0xDE20 }, { 0xF8A6, 0xD3C0 }, + { 0xF8A8, 0xC50F }, { 0xF8AA, 0x76A4 }, { 0xF8AC, 0x49E3 }, { 0xF8AE, 0xF007 }, + { 0xF8B0, 0x49C0 }, { 0xF8B2, 0xF103 }, { 0xF8B4, 0xC607 }, { 0xF8B6, 0xBE00 }, + { 0xF8B8, 0xC606 }, { 0xF8BA, 0xBE00 }, { 0xF8BC, 0xC602 }, { 0xF8BE, 0xBE00 }, + { 0xF8C0, 0x0C4C }, { 0xF8C2, 0x0C28 }, { 0xF8C4, 0x0C2C }, { 0xF8C6, 0xDC00 }, + { 0xF8C8, 0xC707 }, { 0xF8CA, 0x1D00 }, { 0xF8CC, 0x8DE2 }, { 0xF8CE, 0x48C1 }, + { 0xF8D0, 0xC502 }, { 0xF8D2, 0xBD00 }, { 0xF8D4, 0x00AA }, { 0xF8D6, 0xE0C0 }, + { 0xF8D8, 0xC502 }, { 0xF8DA, 0xBD00 }, { 0xF8DC, 0x0132 }, + }; + + static const struct e_info_regdata final_seq[] = { + { 0xFC2A, 0x0743 }, { 0xFC2C, 0x0801 }, { 0xFC2E, 0x0BE9 }, { 0xFC30, 0x02FD }, + { 0xFC32, 0x0C25 }, { 0xFC34, 0x00A9 }, { 0xFC36, 0x012D }, + }; + + rtl_hw_start_8168g(tp); rtl_ephy_init(tp, e_info_8411_2); /* The following Realtek-provided magic fixes an issue with the RX unit * getting confused after the PHY having been powered-down. */ - r8168_mac_ocp_write(tp, 0xFC28, 0x0000); - r8168_mac_ocp_write(tp, 0xFC2A, 0x0000); - r8168_mac_ocp_write(tp, 0xFC2C, 0x0000); - r8168_mac_ocp_write(tp, 0xFC2E, 0x0000); - r8168_mac_ocp_write(tp, 0xFC30, 0x0000); - r8168_mac_ocp_write(tp, 0xFC32, 0x0000); - r8168_mac_ocp_write(tp, 0xFC34, 0x0000); - r8168_mac_ocp_write(tp, 0xFC36, 0x0000); + + r8168_mac_ocp_write_seq(tp, init_zero_seq); mdelay(3); r8168_mac_ocp_write(tp, 0xFC26, 0x0000); - r8168_mac_ocp_write(tp, 0xF800, 0xE008); - r8168_mac_ocp_write(tp, 0xF802, 0xE00A); - r8168_mac_ocp_write(tp, 0xF804, 0xE00C); - r8168_mac_ocp_write(tp, 0xF806, 0xE00E); - r8168_mac_ocp_write(tp, 0xF808, 0xE027); - r8168_mac_ocp_write(tp, 0xF80A, 0xE04F); - r8168_mac_ocp_write(tp, 0xF80C, 0xE05E); - r8168_mac_ocp_write(tp, 0xF80E, 0xE065); - r8168_mac_ocp_write(tp, 0xF810, 0xC602); - r8168_mac_ocp_write(tp, 0xF812, 0xBE00); - r8168_mac_ocp_write(tp, 0xF814, 0x0000); - r8168_mac_ocp_write(tp, 0xF816, 0xC502); - r8168_mac_ocp_write(tp, 0xF818, 0xBD00); - r8168_mac_ocp_write(tp, 0xF81A, 0x074C); - r8168_mac_ocp_write(tp, 0xF81C, 0xC302); - r8168_mac_ocp_write(tp, 0xF81E, 0xBB00); - r8168_mac_ocp_write(tp, 0xF820, 0x080A); - r8168_mac_ocp_write(tp, 0xF822, 0x6420); - r8168_mac_ocp_write(tp, 0xF824, 0x48C2); - r8168_mac_ocp_write(tp, 0xF826, 0x8C20); - r8168_mac_ocp_write(tp, 0xF828, 0xC516); - r8168_mac_ocp_write(tp, 0xF82A, 0x64A4); - r8168_mac_ocp_write(tp, 0xF82C, 0x49C0); - r8168_mac_ocp_write(tp, 0xF82E, 0xF009); - r8168_mac_ocp_write(tp, 0xF830, 0x74A2); - r8168_mac_ocp_write(tp, 0xF832, 0x8CA5); - r8168_mac_ocp_write(tp, 0xF834, 0x74A0); - r8168_mac_ocp_write(tp, 0xF836, 0xC50E); - r8168_mac_ocp_write(tp, 0xF838, 0x9CA2); - r8168_mac_ocp_write(tp, 0xF83A, 0x1C11); - r8168_mac_ocp_write(tp, 0xF83C, 0x9CA0); - r8168_mac_ocp_write(tp, 0xF83E, 0xE006); - r8168_mac_ocp_write(tp, 0xF840, 0x74F8); - r8168_mac_ocp_write(tp, 0xF842, 0x48C4); - r8168_mac_ocp_write(tp, 0xF844, 0x8CF8); - r8168_mac_ocp_write(tp, 0xF846, 0xC404); - r8168_mac_ocp_write(tp, 0xF848, 0xBC00); - r8168_mac_ocp_write(tp, 0xF84A, 0xC403); - r8168_mac_ocp_write(tp, 0xF84C, 0xBC00); - r8168_mac_ocp_write(tp, 0xF84E, 0x0BF2); - r8168_mac_ocp_write(tp, 0xF850, 0x0C0A); - r8168_mac_ocp_write(tp, 0xF852, 0xE434); - r8168_mac_ocp_write(tp, 0xF854, 0xD3C0); - r8168_mac_ocp_write(tp, 0xF856, 0x49D9); - r8168_mac_ocp_write(tp, 0xF858, 0xF01F); - r8168_mac_ocp_write(tp, 0xF85A, 0xC526); - r8168_mac_ocp_write(tp, 0xF85C, 0x64A5); - r8168_mac_ocp_write(tp, 0xF85E, 0x1400); - r8168_mac_ocp_write(tp, 0xF860, 0xF007); - r8168_mac_ocp_write(tp, 0xF862, 0x0C01); - r8168_mac_ocp_write(tp, 0xF864, 0x8CA5); - r8168_mac_ocp_write(tp, 0xF866, 0x1C15); - r8168_mac_ocp_write(tp, 0xF868, 0xC51B); - r8168_mac_ocp_write(tp, 0xF86A, 0x9CA0); - r8168_mac_ocp_write(tp, 0xF86C, 0xE013); - r8168_mac_ocp_write(tp, 0xF86E, 0xC519); - r8168_mac_ocp_write(tp, 0xF870, 0x74A0); - r8168_mac_ocp_write(tp, 0xF872, 0x48C4); - r8168_mac_ocp_write(tp, 0xF874, 0x8CA0); - r8168_mac_ocp_write(tp, 0xF876, 0xC516); - r8168_mac_ocp_write(tp, 0xF878, 0x74A4); - r8168_mac_ocp_write(tp, 0xF87A, 0x48C8); - r8168_mac_ocp_write(tp, 0xF87C, 0x48CA); - r8168_mac_ocp_write(tp, 0xF87E, 0x9CA4); - r8168_mac_ocp_write(tp, 0xF880, 0xC512); - r8168_mac_ocp_write(tp, 0xF882, 0x1B00); - r8168_mac_ocp_write(tp, 0xF884, 0x9BA0); - r8168_mac_ocp_write(tp, 0xF886, 0x1B1C); - r8168_mac_ocp_write(tp, 0xF888, 0x483F); - r8168_mac_ocp_write(tp, 0xF88A, 0x9BA2); - r8168_mac_ocp_write(tp, 0xF88C, 0x1B04); - r8168_mac_ocp_write(tp, 0xF88E, 0xC508); - r8168_mac_ocp_write(tp, 0xF890, 0x9BA0); - r8168_mac_ocp_write(tp, 0xF892, 0xC505); - r8168_mac_ocp_write(tp, 0xF894, 0xBD00); - r8168_mac_ocp_write(tp, 0xF896, 0xC502); - r8168_mac_ocp_write(tp, 0xF898, 0xBD00); - r8168_mac_ocp_write(tp, 0xF89A, 0x0300); - r8168_mac_ocp_write(tp, 0xF89C, 0x051E); - r8168_mac_ocp_write(tp, 0xF89E, 0xE434); - r8168_mac_ocp_write(tp, 0xF8A0, 0xE018); - r8168_mac_ocp_write(tp, 0xF8A2, 0xE092); - r8168_mac_ocp_write(tp, 0xF8A4, 0xDE20); - r8168_mac_ocp_write(tp, 0xF8A6, 0xD3C0); - r8168_mac_ocp_write(tp, 0xF8A8, 0xC50F); - r8168_mac_ocp_write(tp, 0xF8AA, 0x76A4); - r8168_mac_ocp_write(tp, 0xF8AC, 0x49E3); - r8168_mac_ocp_write(tp, 0xF8AE, 0xF007); - r8168_mac_ocp_write(tp, 0xF8B0, 0x49C0); - r8168_mac_ocp_write(tp, 0xF8B2, 0xF103); - r8168_mac_ocp_write(tp, 0xF8B4, 0xC607); - r8168_mac_ocp_write(tp, 0xF8B6, 0xBE00); - r8168_mac_ocp_write(tp, 0xF8B8, 0xC606); - r8168_mac_ocp_write(tp, 0xF8BA, 0xBE00); - r8168_mac_ocp_write(tp, 0xF8BC, 0xC602); - r8168_mac_ocp_write(tp, 0xF8BE, 0xBE00); - r8168_mac_ocp_write(tp, 0xF8C0, 0x0C4C); - r8168_mac_ocp_write(tp, 0xF8C2, 0x0C28); - r8168_mac_ocp_write(tp, 0xF8C4, 0x0C2C); - r8168_mac_ocp_write(tp, 0xF8C6, 0xDC00); - r8168_mac_ocp_write(tp, 0xF8C8, 0xC707); - r8168_mac_ocp_write(tp, 0xF8CA, 0x1D00); - r8168_mac_ocp_write(tp, 0xF8CC, 0x8DE2); - r8168_mac_ocp_write(tp, 0xF8CE, 0x48C1); - r8168_mac_ocp_write(tp, 0xF8D0, 0xC502); - r8168_mac_ocp_write(tp, 0xF8D2, 0xBD00); - r8168_mac_ocp_write(tp, 0xF8D4, 0x00AA); - r8168_mac_ocp_write(tp, 0xF8D6, 0xE0C0); - r8168_mac_ocp_write(tp, 0xF8D8, 0xC502); - r8168_mac_ocp_write(tp, 0xF8DA, 0xBD00); - r8168_mac_ocp_write(tp, 0xF8DC, 0x0132); + r8168_mac_ocp_write_seq(tp, recover_seq); r8168_mac_ocp_write(tp, 0xFC26, 0x8000); - r8168_mac_ocp_write(tp, 0xFC2A, 0x0743); - r8168_mac_ocp_write(tp, 0xFC2C, 0x0801); - r8168_mac_ocp_write(tp, 0xFC2E, 0x0BE9); - r8168_mac_ocp_write(tp, 0xFC30, 0x02FD); - r8168_mac_ocp_write(tp, 0xFC32, 0x0C25); - r8168_mac_ocp_write(tp, 0xFC34, 0x00A9); - r8168_mac_ocp_write(tp, 0xFC36, 0x012D); + r8168_mac_ocp_write_seq(tp, final_seq); + } static void rtl_hw_start_8168h_1(struct rtl8169_private *tp) From patchwork Sun Oct 29 18:35:59 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Mirsad Todorovac X-Patchwork-Id: 159388 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a59:d641:0:b0:403:3b70:6f57 with SMTP id cy1csp1811373vqb; Sun, 29 Oct 2023 11:43:50 -0700 (PDT) X-Google-Smtp-Source: AGHT+IGkz3ZQQMbmRPwwZgmhxdWTTksYGanGNmoeXOpPHnma9YIKxsDeosj0uX7L4FV0194nDKEf X-Received: by 2002:a92:c264:0:b0:34f:6837:6ab7 with SMTP id h4-20020a92c264000000b0034f68376ab7mr12891611ild.16.1698605030774; Sun, 29 Oct 2023 11:43:50 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1698605030; cv=none; d=google.com; s=arc-20160816; b=uVUjZZzF336ksPE/+v8+FAu9Tb2jX3Q+yNqBEpD3JX4hg8EVuLe1rm4h4+u847kHMY LzhOX7BbWRLkyvP1jOulKheOl69TA4ns713xO71O+JVA99wvIztSUOh2JllHCioiL/73 pLcjtLK6BUj+KoUjSYREJGVxKs6P5y5XgNYTaCCFhy/G0dVixaj+nPTEwO7EESVGcF1q +fddnik+G3VUbdzwh7YjtQzCmI96Fpye7HUhDheKr1lVPJ3CV5dJadJ+tuWKtnhrH1vg +shLKkAA7EXpKsw7IavuMaj55xcU4+faIG3rXAfnZ41hpL/8AuMxH7wrtN12oRvIgRw7 Pgow== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :references:in-reply-to:message-id:date:subject:cc:to:from :dkim-signature:dkim-signature; bh=MtdPUwGlDQL7d7fEav8CA/ty7tAdH8tDrFyr7cZhZYY=; fh=SsNJs69sMYlYTeWQYB3Y6uFVnk1BYEiSEalBcmc5mfg=; b=aGm2vFoNBS7TnrLU0YNLIgUip57eDzw2GKctj2M7KTh20GCXbW4lmrfj+r3zn/xRmR 4+Hy9/qHx3h1KbBcu9kohnrFtRitSDybQpbaNjVIa2B1ynL+Z5PHjqyiLzPWpCFHpxU8 Me0ZYhZSdklDk62s4PhZZZYRzIV0XBhHwv0Ef1iBxaaX7Jh5YjSeog7h7i2Ud0gdpxu7 MIENxWRSwYgoiRB3rJjhszL+ke0hry7wUx4MFYduMLV356Udi0HdvQ6Uqz3lqEA3Zwhq 1J9euxT5hQkpdLCT6IiesSk/OWk7tgl6dD0fBt8yqNX/IBWpLyBEMfymdV9zSm3Yii2r 2wuw== ARC-Authentication-Results: i=1; mx.google.com; dkim=fail header.i=@alu.unizg.hr header.s=mail header.b=0ljv846l; dkim=fail header.i=@alu.unizg.hr header.s=mail header.b="OKK/UwJe"; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::3:4 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=alu.unizg.hr Received: from howler.vger.email (howler.vger.email. [2620:137:e000::3:4]) by mx.google.com with ESMTPS id jb20-20020a170903259400b001bbd70bdffbsi3948994plb.440.2023.10.29.11.43.50 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 29 Oct 2023 11:43:50 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::3:4 as permitted sender) client-ip=2620:137:e000::3:4; Authentication-Results: mx.google.com; dkim=fail header.i=@alu.unizg.hr header.s=mail header.b=0ljv846l; dkim=fail header.i=@alu.unizg.hr header.s=mail header.b="OKK/UwJe"; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::3:4 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=alu.unizg.hr Received: from out1.vger.email (depot.vger.email [IPv6:2620:137:e000::3:0]) by howler.vger.email (Postfix) with ESMTP id 17605806229F; Sun, 29 Oct 2023 11:43:48 -0700 (PDT) X-Virus-Status: Clean X-Virus-Scanned: clamav-milter 0.103.10 at howler.vger.email Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S229529AbjJ2SnS (ORCPT + 30 others); Sun, 29 Oct 2023 14:43:18 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:45338 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S230288AbjJ2SnR (ORCPT ); Sun, 29 Oct 2023 14:43:17 -0400 Received: from domac.alu.hr (domac.alu.unizg.hr [161.53.235.3]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 6F4B9C6; Sun, 29 Oct 2023 11:43:12 -0700 (PDT) Received: from localhost (localhost [127.0.0.1]) by domac.alu.hr (Postfix) with ESMTP id 0392960186; Sun, 29 Oct 2023 19:43:11 +0100 (CET) DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=alu.unizg.hr; s=mail; t=1698604991; bh=T8Jr3u654cavid8IDVFmmKq+08kkDjPH+bbS9lNgtgk=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=0ljv846lwP1hOLoB47JTOa7IKp9pR15VJPfr6bQKDDmmtk9LzOckGYnMl34MtOJDT J2z3pDXSsA5ATZdthiWlu4NokhSAea/CudjF0/wxZt/38gZRwjSL1g2zB1NS/GgGZ8 2kau8k0Hp2NMwY5LJjqSQ8GcYy+PpUhkgFvUnSYZ2quovcfEHNSlwySWJ4aheVEnFq mRTvzw0qxtVKOEIYmzSKtphPvLilg7dtm/k7HKPWl6HRNExQz3D393LJrErVvREeZW pjcqK1J5WRiZ3uS+vFU6d1/0dLtKqpY+K1LpSPjY90MJtUCojiLSskmp9Qen5saRV4 3qpg8ghU91KYw== X-Virus-Scanned: Debian amavisd-new at domac.alu.hr Received: from domac.alu.hr ([127.0.0.1]) by localhost (domac.alu.hr [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id nVi7RQTlmsdk; Sun, 29 Oct 2023 19:43:08 +0100 (CET) Received: from defiant.home (78-3-40-247.adsl.net.t-com.hr [78.3.40.247]) by domac.alu.hr (Postfix) with ESMTPSA id 6C0E760173; Sun, 29 Oct 2023 19:43:08 +0100 (CET) DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=alu.unizg.hr; s=mail; t=1698604988; bh=T8Jr3u654cavid8IDVFmmKq+08kkDjPH+bbS9lNgtgk=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=OKK/UwJeXihynVGyrKpyFYQsTtLflf2VGiQAKcCD+AOvlV3iyLhQYFGNF4G5mS4ay lrGQwkvrySCtQBLBQL1zYAtkG5s+BRUUBPut+aizbngoqYqK2NoETYyA6axPF0300a +DrQk3ifh+hRLGo4WhYXXEO6PDhvokt5M99HCYDWZRAa4hwWi38dsfONqEZtvRqBuy FjjzmYgKCWv+tBADwa7RZoedOqPap3o4c9rLKxkCQ7Lrnrk6wwkDNmyuJxJBPUm0Qa 9lza6G66GboTI3ykyaRfqVCuVnWCNMhIGjCU12dQJ7HQquTOd/ejphSdm5rziC2lZJ LJDqeQbR8X99g== From: Mirsad Goran Todorovac To: Jason Gunthorpe , Joerg Roedel , Lu Baolu , iommu@lists.linux.dev, linux-kernel@vger.kernel.org, netdev@vger.kernel.org Cc: Joerg Roedel , Will Deacon , Robin Murphy , Heiner Kallweit , nic_swsd@realtek.com, "David S. Miller" , Eric Dumazet , Jakub Kicinski , Paolo Abeni , Mirsad Goran Todorovac , Marco Elver Subject: [PATCH v5 3/7] r8169: Coalesce mac ocp write and modify for 8168H start to reduce spinlock contention Date: Sun, 29 Oct 2023 19:35:59 +0100 Message-Id: <20231029183600.451694-3-mirsad.todorovac@alu.unizg.hr> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20231029183600.451694-1-mirsad.todorovac@alu.unizg.hr> References: <20231029183600.451694-1-mirsad.todorovac@alu.unizg.hr> MIME-Version: 1.0 X-Spam-Status: No, score=-0.6 required=5.0 tests=DKIM_INVALID,DKIM_SIGNED, HEADER_FROM_DIFFERENT_DOMAINS,MAILING_LIST_MULTI,SPF_HELO_NONE, SPF_PASS autolearn=unavailable autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on howler.vger.email Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org X-Greylist: Sender passed SPF test, not delayed by milter-greylist-4.6.4 (howler.vger.email [0.0.0.0]); Sun, 29 Oct 2023 11:43:48 -0700 (PDT) X-getmail-retrieved-from-mailbox: INBOX X-GMAIL-THRID: 1781116468596617648 X-GMAIL-MSGID: 1781116468596617648 Repeated calls to r8168_mac_ocp_write() and r8168_mac_ocp_modify() in the startup of 8168H involve implicit spin_lock_irqsave() and spin_unlock_irqrestore() on each invocation. Coalesced with the corresponding helpers into r8168_mac_ocp_write_seq() and r8168_mac_ocp_modify_seq() with a sinqle paired spin_lock_irqsave() and spin_unlock_irqrestore(), these calls help reduce overall spinlock contention. Fixes: ef712ede3541d ("r8169: add helper r8168_mac_ocp_modify") Fixes: 6e1d0b8988188 ("r8169:add support for RTL8168H and RTL8107E") Cc: Heiner Kallweit Cc: Marco Elver Cc: nic_swsd@realtek.com Cc: "David S. Miller" Cc: Eric Dumazet Cc: Jakub Kicinski Cc: Paolo Abeni Cc: netdev@vger.kernel.org Cc: linux-kernel@vger.kernel.org Link: https://lore.kernel.org/lkml/20231028005153.2180411-1-mirsad.todorovac@alu.unizg.hr/ Link: https://lore.kernel.org/lkml/20231028110459.2644926-1-mirsad.todorovac@alu.unizg.hr/ Signed-off-by: Mirsad Goran Todorovac --- v5: added unlocked primitives to allow mac ocs modify grouping applied coalescing of mac ocp writes/modifies for 8168ep and 8117 some formatting fixes to please checkpatch.pl v4: fixed complaints as advised by Heiner and checkpatch.pl split the patch into five sections to be more easily manipulated and reviewed introduced r8168_mac_ocp_write_seq() applied coalescing of mac ocp writes/modifies for 8168H, 8125 and 8125B v3: removed register/mask pair array sentinels, so using ARRAY_SIZE(). avoided duplication of RTL_W32() call code as advised by Heiner. drivers/net/ethernet/realtek/r8169_main.c | 26 +++++++++++++++-------- 1 file changed, 17 insertions(+), 9 deletions(-) diff --git a/drivers/net/ethernet/realtek/r8169_main.c b/drivers/net/ethernet/realtek/r8169_main.c index f4a1d1a74b8b..29ee93b8b702 100644 --- a/drivers/net/ethernet/realtek/r8169_main.c +++ b/drivers/net/ethernet/realtek/r8169_main.c @@ -3231,6 +3231,21 @@ static void rtl_hw_start_8168h_1(struct rtl8169_private *tp) { 0x04, 0xffff, 0x854a }, { 0x01, 0xffff, 0x068b } }; + + static const struct e_info_regmaskset e_info_regmaskset_8168h_1[] = { + { 0xe056, 0x00f0, 0x0070 }, + { 0xe052, 0x6000, 0x8008 }, + { 0xe0d6, 0x01ff, 0x017f }, + { 0xd420, 0x0fff, 0x047f }, + }; + + static const struct e_info_regdata e_info_regdata_8168h_1[] = { + { 0xe63e, 0x0001 }, + { 0xe63e, 0x0000 }, + { 0xc094, 0x0000 }, + { 0xc09e, 0x0000 }, + }; + int rg_saw_cnt; rtl_ephy_init(tp, e_info_8168h_1); @@ -3271,15 +3286,8 @@ static void rtl_hw_start_8168h_1(struct rtl8169_private *tp) r8168_mac_ocp_modify(tp, 0xd412, 0x0fff, sw_cnt_1ms_ini); } - r8168_mac_ocp_modify(tp, 0xe056, 0x00f0, 0x0070); - r8168_mac_ocp_modify(tp, 0xe052, 0x6000, 0x8008); - r8168_mac_ocp_modify(tp, 0xe0d6, 0x01ff, 0x017f); - r8168_mac_ocp_modify(tp, 0xd420, 0x0fff, 0x047f); - - r8168_mac_ocp_write(tp, 0xe63e, 0x0001); - r8168_mac_ocp_write(tp, 0xe63e, 0x0000); - r8168_mac_ocp_write(tp, 0xc094, 0x0000); - r8168_mac_ocp_write(tp, 0xc09e, 0x0000); + r8168_mac_ocp_modify_seq(tp, e_info_regmaskset_8168h_1); + r8168_mac_ocp_write_seq(tp, e_info_regdata_8168h_1); } static void rtl_hw_start_8168ep(struct rtl8169_private *tp) From patchwork Sun Oct 29 18:36:01 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Mirsad Todorovac X-Patchwork-Id: 159389 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a59:d641:0:b0:403:3b70:6f57 with SMTP id cy1csp1811508vqb; Sun, 29 Oct 2023 11:44:16 -0700 (PDT) X-Google-Smtp-Source: AGHT+IHFk5ypNwF1B7EU83cNIvBP3tpLrt4JfXO1XMpEXUOgj+YzRoW5WzHtmfI1M/2frzxNjdnx X-Received: by 2002:a17:902:c412:b0:1cc:20de:c826 with SMTP id k18-20020a170902c41200b001cc20dec826mr10261965plk.34.1698605056278; Sun, 29 Oct 2023 11:44:16 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1698605056; cv=none; d=google.com; s=arc-20160816; b=OtnAnKLWMRjDs4PXQYt3LhgMxk4+bMAWpukRipA6LMUC9IMw3W4op4Av3LW97v2sES OYcu3a9VP5tjwi7My6AmXWtCqOfjrO7HmQsAZ1wmcYHCpTvvS8xtiR2bhF2WpiE6o9kN o3URl9RgxncIqQCs1YAkdGGopBAtmKHuMTAuvwSNDE+k4H6IogPX7VmVZPncQ4n6rAqp rYBUxVAsvfBDrzmmHtSbKThDehSbMWny1rOZVWPTMhL8+nitzu+N5MLNWROVhZ/PXRL8 94A8vGyjqyTJtm8Op/NeCNzo2V1iAZd+s5eA3fZyHx8zYh36usNdjazUmnkoBbRYY5BU KRbg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :references:in-reply-to:message-id:date:subject:cc:to:from :dkim-signature:dkim-signature; bh=4MDd8S9EFEr/Szqp50sM3J+3cjXWecYhcNhbEVdBOrQ=; fh=SsNJs69sMYlYTeWQYB3Y6uFVnk1BYEiSEalBcmc5mfg=; b=sSiE85181/dN9L8FhCqse2ESUJjUBDdni7ESZPmDpIZIrZCtx46PujSUf2ODmgoafQ nPzIbUrwq6sep4Q2UfbS/KkVVAggQjzAnI0Mc+pJD9Dle0RLZXHrvaa+AHw4WuAaHD6Q TwfNd2Hx2prdEUc77HGJEeWZzzwyZNil03zSfgo8zdoNcJ+YT2lIecst8Y9/+rXtHTH5 dcYfXoM51VMSseh/ylK8Ju21otWdAp6XWElZWDWQpGHbEjQmYbEP5cIxvOj1smWAH+kn CG+EXHV2d7HBdFhIn1eEgOHIUvqxwrx8KLa+FXRhlvARwfUsa4ichkP0UKvvrE+PAz6f 9vWg== ARC-Authentication-Results: i=1; mx.google.com; dkim=fail header.i=@alu.unizg.hr header.s=mail header.b=sujq5HcF; dkim=fail header.i=@alu.unizg.hr header.s=mail header.b=WbPLYZpf; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.36 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=alu.unizg.hr Received: from pete.vger.email (pete.vger.email. [23.128.96.36]) by mx.google.com with ESMTPS id jg3-20020a17090326c300b001bf1d1d99b0si3992510plb.568.2023.10.29.11.44.15 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 29 Oct 2023 11:44:16 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.36 as permitted sender) client-ip=23.128.96.36; Authentication-Results: mx.google.com; dkim=fail header.i=@alu.unizg.hr header.s=mail header.b=sujq5HcF; dkim=fail header.i=@alu.unizg.hr header.s=mail header.b=WbPLYZpf; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.36 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=alu.unizg.hr Received: from out1.vger.email (depot.vger.email [IPv6:2620:137:e000::3:0]) by pete.vger.email (Postfix) with ESMTP id 3BD8080621EA; Sun, 29 Oct 2023 11:44:10 -0700 (PDT) X-Virus-Status: Clean X-Virus-Scanned: clamav-milter 0.103.10 at pete.vger.email Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S230344AbjJ2Snd (ORCPT + 30 others); Sun, 29 Oct 2023 14:43:33 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:57784 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S230325AbjJ2Snb (ORCPT ); Sun, 29 Oct 2023 14:43:31 -0400 Received: from domac.alu.hr (domac.alu.unizg.hr [IPv6:2001:b68:2:2800::3]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id E7956CC; Sun, 29 Oct 2023 11:43:28 -0700 (PDT) Received: from localhost (localhost [127.0.0.1]) by domac.alu.hr (Postfix) with ESMTP id C63F160187; Sun, 29 Oct 2023 19:43:26 +0100 (CET) DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=alu.unizg.hr; s=mail; t=1698605006; bh=C0fbJhCelN3HUXSd6OtmKYAgitc2PZFM3gqVXrhWFL4=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=sujq5HcFHVcb7rJtKdra3UexWxdEQgN79FBkZ+idn+zw2xm6JOSgenw1eP83f3riX KhCvgni8iSzh+xU6lR/K+v3YclDPzE2UbQ66SGX1z0s2bo9QJKkH3w4gThuk2EDPEQ wFNWb+rJs3QbJq6V1Diu8hYcctdztxeEINeTAjROffMrcPc5K3DXpvkRGkq5ewnQ6a 0jIm6/5Rl6AYdVlP4Ofqw8q+/L+TmAE6XPqcXl+dtEuywrVz3ulXawRFixKc4ykgXH ojH5pt19eoc/AdH2b15c9f5t7mc0LDbmZYipZfwMnwW1CpOsGBjyt3skBib7jyU/Xm 7FiRBNZlWyF9g== X-Virus-Scanned: Debian amavisd-new at domac.alu.hr Received: from domac.alu.hr ([127.0.0.1]) by localhost (domac.alu.hr [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id hjd0BdmdBeQa; Sun, 29 Oct 2023 19:43:24 +0100 (CET) Received: from defiant.home (78-3-40-247.adsl.net.t-com.hr [78.3.40.247]) by domac.alu.hr (Postfix) with ESMTPSA id 3B5A160173; Sun, 29 Oct 2023 19:43:24 +0100 (CET) DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=alu.unizg.hr; s=mail; t=1698605004; bh=C0fbJhCelN3HUXSd6OtmKYAgitc2PZFM3gqVXrhWFL4=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=WbPLYZpfeA7P3IpyqtWcs4mD1SaB6HjXHzCX6Az/u/OHJzb1XUQJ1Z8jeSIFQ7N9M VgzqnObyyJ2XVZ2sJO1zi7dzpNcsrSwAHI5jiFWu/GQoBgl0HDrHGZ93KlOYhmE67I aohbFwCw87xblI9OjJh5/04S51hNfH3PX/gzOPuQP5tFWgXidKdf6kYmrI1Q9MQePU vj/2WCItMuHbmZ+pFqxolcDateFkM7To0U2wczC4tCzqly5U06uUxz7HXCCKoFLbWV TjNvAM0lKT2afVbWRbeHLGp7i1p8Ar4dwiV8FZDcX7bquCyamnZ7KNoqztUea+p6sE Tf/xOZJoMlaHg== From: Mirsad Goran Todorovac To: Jason Gunthorpe , Joerg Roedel , Lu Baolu , iommu@lists.linux.dev, linux-kernel@vger.kernel.org, netdev@vger.kernel.org Cc: Joerg Roedel , Will Deacon , Robin Murphy , Heiner Kallweit , nic_swsd@realtek.com, "David S. Miller" , Eric Dumazet , Jakub Kicinski , Paolo Abeni , Mirsad Goran Todorovac , Marco Elver Subject: [PATCH v5 4/7] r8169: Coalesce mac ocp write and modify for 8168ep start to reduce spinlock contention Date: Sun, 29 Oct 2023 19:36:01 +0100 Message-Id: <20231029183600.451694-4-mirsad.todorovac@alu.unizg.hr> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20231029183600.451694-1-mirsad.todorovac@alu.unizg.hr> References: <20231029183600.451694-1-mirsad.todorovac@alu.unizg.hr> MIME-Version: 1.0 X-Spam-Status: No, score=-0.6 required=5.0 tests=DKIM_INVALID,DKIM_SIGNED, HEADER_FROM_DIFFERENT_DOMAINS,MAILING_LIST_MULTI,SPF_HELO_NONE, SPF_PASS autolearn=unavailable autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on pete.vger.email Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org X-Greylist: Sender passed SPF test, not delayed by milter-greylist-4.6.4 (pete.vger.email [0.0.0.0]); Sun, 29 Oct 2023 11:44:10 -0700 (PDT) X-getmail-retrieved-from-mailbox: INBOX X-GMAIL-THRID: 1781116495297175414 X-GMAIL-MSGID: 1781116495297175414 Repeated calls to r8168_mac_ocp_write() and r8168_mac_ocp_modify() in the startup of RTL8168ep involve implicit spin_lock_irqsave() and spin_unlock_irqrestore() on each invocation. Coalesced with the corresponding helpers into r8168_mac_ocp_write_seq() and r8168_mac_ocp_modify_seq() with a sinqle paired spin_lock_irqsave() and spin_unlock_irqrestore(), these calls help reduce overall spinlock contention. Fixes: ef712ede3541d ("r8169: add helper r8168_mac_ocp_modify") Cc: Heiner Kallweit Cc: Marco Elver Cc: nic_swsd@realtek.com Cc: "David S. Miller" Cc: Eric Dumazet Cc: Jakub Kicinski Cc: Paolo Abeni Cc: netdev@vger.kernel.org Cc: linux-kernel@vger.kernel.org Link: https://lore.kernel.org/lkml/20231028005153.2180411-1-mirsad.todorovac@alu.unizg.hr/ Link: https://lore.kernel.org/lkml/20231028110459.2644926-1-mirsad.todorovac@alu.unizg.hr/ Signed-off-by: Mirsad Goran Todorovac --- v5: added unlocked primitives to allow mac ocs modify grouping applied coalescing of mac ocp writes/modifies for 8168ep and 8117 some formatting fixes to please checkpatch.pl v4: fixed complaints as advised by Heiner and checkpatch.pl split the patch into five sections to be more easily manipulated and reviewed introduced r8168_mac_ocp_write_seq() applied coalescing of mac ocp writes/modifies for 8168H, 8125 and 8125B v3: removed register/mask pair array sentinels, so using ARRAY_SIZE(). avoided duplication of RTL_W32() call code as advised by Heiner. drivers/net/ethernet/realtek/r8169_main.c | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/drivers/net/ethernet/realtek/r8169_main.c b/drivers/net/ethernet/realtek/r8169_main.c index 29ee93b8b702..27016aaeb6a0 100644 --- a/drivers/net/ethernet/realtek/r8169_main.c +++ b/drivers/net/ethernet/realtek/r8169_main.c @@ -3326,6 +3326,12 @@ static void rtl_hw_start_8168ep_3(struct rtl8169_private *tp) { 0x1e, 0x0000, 0x2000 }, }; + static const struct e_info_regmaskset e_info_8168ep_3_mod_1[] = { + { 0xd3e2, 0x0fff, 0x0271 }, + { 0xd3e4, 0x00ff, 0x0000 }, + { 0xe860, 0x0000, 0x0080 }, + }; + rtl_ephy_init(tp, e_info_8168ep_3); rtl_hw_start_8168ep(tp); @@ -3333,9 +3339,7 @@ static void rtl_hw_start_8168ep_3(struct rtl8169_private *tp) RTL_W8(tp, DLLPR, RTL_R8(tp, DLLPR) & ~PFM_EN); RTL_W8(tp, MISC_1, RTL_R8(tp, MISC_1) & ~PFM_D3COLD_EN); - r8168_mac_ocp_modify(tp, 0xd3e2, 0x0fff, 0x0271); - r8168_mac_ocp_modify(tp, 0xd3e4, 0x00ff, 0x0000); - r8168_mac_ocp_modify(tp, 0xe860, 0x0000, 0x0080); + r8168_mac_ocp_modify_seq(tp, e_info_8168ep_3_mod_1); } static void rtl_hw_start_8117(struct rtl8169_private *tp) From patchwork Sun Oct 29 18:36:03 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Mirsad Todorovac X-Patchwork-Id: 159390 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a59:d641:0:b0:403:3b70:6f57 with SMTP id cy1csp1811519vqb; Sun, 29 Oct 2023 11:44:19 -0700 (PDT) X-Google-Smtp-Source: AGHT+IEYueySqD10jgpjRSAApMNkx1kweYGWcCNOGcbO51RtewfwFRKJmlebQt5m3+GacHAmAT4D X-Received: by 2002:a05:6808:1921:b0:3a3:95f9:c99b with SMTP id bf33-20020a056808192100b003a395f9c99bmr12029150oib.35.1698605058675; Sun, 29 Oct 2023 11:44:18 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1698605058; cv=none; d=google.com; s=arc-20160816; b=QTIR+RZ0Ad84iuYBjO/b5sVLmk8tzqf/Wbe8svm0O6UGnkBlj7APIhnE+h982qFwyx dUtg53TCe8FmRaWo3QYLhTJYfD+Qw9ubUFWJAeZwpv8mR0CAjDosA66HGQThvdDYrLij erdaGtKF5vnXOesdoQBU9nyO6yOjt6GQdLtloY7+mkRMtk+Wy69dVCx7DGcze3T/8rXk TTun+xT5rlDDnSJtN6qzpugV72/NNYm9nkvwyBzPIEmwqd1TeBvKNGw6BtjbiPDqXd1p 2AcS87nlqoavXzX9eYpEJ1WtmpWndXysVWoMjGkQxy0814znxcONC+CAZr9+6XsZLBGQ aJaA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :references:in-reply-to:message-id:date:subject:cc:to:from :dkim-signature:dkim-signature; bh=RhxG6qbfODtYJ+rz33LBz3dGvk+LZdE/IqM1kHAk0/k=; fh=SsNJs69sMYlYTeWQYB3Y6uFVnk1BYEiSEalBcmc5mfg=; b=qy6HH8CwWEOm9wDTt6nPXaxOC0bfjtcH/ISbQwaVV1AXLppW1SP7M6LFRpSxHs8ORL rPBIUDJPSlWtUh4oI0BuPLHhQWuQ1x3tsQteR1O42mH1z06x2jfADgpkmpyO4ad17P17 XOvxiT8jeTyzTfRFM3AKq6vhQ3P1vAwiGnXuaDliToSvDXUsWv7vwPtyny86B5JDd4UL CK8azIlm2uFBzJRJafWQoQl/lB+SfpKkt6AxOgrg8JfLHUWVTIWYJf+fK3OzvCluj7PT gzXHUqdfU5bPHKyOTENT9EYWKhOdtl6/aG/z0YyhHhNZyvBilfZJ26W6PwXeKDu8KnWY DaoA== ARC-Authentication-Results: i=1; mx.google.com; dkim=fail header.i=@alu.unizg.hr header.s=mail header.b=FmpvM7s8; dkim=fail header.i=@alu.unizg.hr header.s=mail header.b=GTrGCIbM; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::3:4 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=alu.unizg.hr Received: from howler.vger.email (howler.vger.email. [2620:137:e000::3:4]) by mx.google.com with ESMTPS id v19-20020a056a00149300b00690c1a57210si3871336pfu.115.2023.10.29.11.44.18 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 29 Oct 2023 11:44:18 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::3:4 as permitted sender) client-ip=2620:137:e000::3:4; Authentication-Results: mx.google.com; dkim=fail header.i=@alu.unizg.hr header.s=mail header.b=FmpvM7s8; dkim=fail header.i=@alu.unizg.hr header.s=mail header.b=GTrGCIbM; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::3:4 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=alu.unizg.hr Received: from out1.vger.email (depot.vger.email [IPv6:2620:137:e000::3:0]) by howler.vger.email (Postfix) with ESMTP id 2241B80622A0; Sun, 29 Oct 2023 11:44:15 -0700 (PDT) X-Virus-Status: Clean X-Virus-Scanned: clamav-milter 0.103.10 at howler.vger.email Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S230334AbjJ2Snv (ORCPT + 30 others); Sun, 29 Oct 2023 14:43:51 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:45292 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S230300AbjJ2Snt (ORCPT ); Sun, 29 Oct 2023 14:43:49 -0400 Received: from domac.alu.hr (domac.alu.unizg.hr [IPv6:2001:b68:2:2800::3]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 233B7D3; Sun, 29 Oct 2023 11:43:46 -0700 (PDT) Received: from localhost (localhost [127.0.0.1]) by domac.alu.hr (Postfix) with ESMTP id B166F60182; Sun, 29 Oct 2023 19:43:45 +0100 (CET) DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=alu.unizg.hr; s=mail; t=1698605025; bh=WtQ0K7++ytbFBVwISz9KquDCSJEBxV2WigbuQjUKAto=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=FmpvM7s8By0xhPMAWEDqKCod/3e0d+u/QW5C1Gci8lviQyMiNdnS2+gqErs2C7ol8 zygD0ZJB1cJ3OxBJuDBBygedJHUpqwlYnYxqfFonIVbI07PD7rDpdKgBYXBqPCiqpP KHyr6fYaGRUC7MwZlQmBgP85K+kri1Mr/SkEZirJkrxt9KJ/2K4ezIk/624O5v1Jjb rrBzh5fZtg1cZYA6QhR/OF8zlRPoW+Yr97IArS5/vZuKGIi+vOTL7jl9pErbBBs5W1 h/3PASI2AkLyCoqD24Hujne0ibc5DGlvfo0oS6uclSetLgjR+Nwm8wuYsTQsnF2QzP 9QprPCb2VguIQ== X-Virus-Scanned: Debian amavisd-new at domac.alu.hr Received: from domac.alu.hr ([127.0.0.1]) by localhost (domac.alu.hr [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id 6UjbwLRJhPwx; Sun, 29 Oct 2023 19:43:43 +0100 (CET) Received: from defiant.home (78-3-40-247.adsl.net.t-com.hr [78.3.40.247]) by domac.alu.hr (Postfix) with ESMTPSA id 2608E60173; Sun, 29 Oct 2023 19:43:43 +0100 (CET) DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=alu.unizg.hr; s=mail; t=1698605023; bh=WtQ0K7++ytbFBVwISz9KquDCSJEBxV2WigbuQjUKAto=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=GTrGCIbME3W1vrfK1FslEJ4+oAaUJvWh2dClppr3l1KGBmx+QtQRPPCPCckoJOpp3 3QWgPPz4ZT/eO4ABt429pIj9jgKyWgmYHDS+PrpDBAwx93N6V/ji6yO0cj9GliWlhb CXLrsTOdaIhg3WHpAM/+PoxJMMr+XbV9MUxLXafRre6ekM+O9GFwbP8xCM8ynEIabi jW9JKorSpICtAVzhQycyUV03SLWltj0wJmpvcATl+N8iv7RfLVgsZZ7YCm8x3m445E k+jMQcphJrt93BP0C/OtxBfoQC+IwuLBn8zUCLtesxsINMz3weHCv3gtqtQyptlGhJ W02IYziuhuQEA== From: Mirsad Goran Todorovac To: Jason Gunthorpe , Joerg Roedel , Lu Baolu , iommu@lists.linux.dev, linux-kernel@vger.kernel.org, netdev@vger.kernel.org Cc: Joerg Roedel , Will Deacon , Robin Murphy , Heiner Kallweit , nic_swsd@realtek.com, "David S. Miller" , Eric Dumazet , Jakub Kicinski , Paolo Abeni , Mirsad Goran Todorovac , Marco Elver Subject: [PATCH v5 5/7] r8169: Reduce spinlock contention for the start of RTL8117 Date: Sun, 29 Oct 2023 19:36:03 +0100 Message-Id: <20231029183600.451694-5-mirsad.todorovac@alu.unizg.hr> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20231029183600.451694-1-mirsad.todorovac@alu.unizg.hr> References: <20231029183600.451694-1-mirsad.todorovac@alu.unizg.hr> MIME-Version: 1.0 X-Spam-Status: No, score=-0.6 required=5.0 tests=DKIM_INVALID,DKIM_SIGNED, HEADER_FROM_DIFFERENT_DOMAINS,MAILING_LIST_MULTI,SPF_HELO_NONE, SPF_PASS autolearn=unavailable autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on howler.vger.email Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org X-Greylist: Sender passed SPF test, not delayed by milter-greylist-4.6.4 (howler.vger.email [0.0.0.0]); Sun, 29 Oct 2023 11:44:15 -0700 (PDT) X-getmail-retrieved-from-mailbox: INBOX X-GMAIL-THRID: 1781116498182234562 X-GMAIL-MSGID: 1781116498182234562 Repeated calls to r8168_mac_ocp_write() and r8168_mac_ocp_modify() in the startup of RTL8168ep involve implicit spin_lock_irqsave() and spin_unlock_irqrestore() on each invocation. This is avoided by grouping unlocked __r8168_mac_ocp_write() and __r8168_mac_ocp_modify() primitives enclosed in the explicit spin_lock_irqsave()/spin_unlock_irqrestore() pair. Even if the lock is not contended, the check requires a LOCK CMPXCHG or a similar instruction, which prevents all cores from accessing the memory bus. Fixes: 1287723aa139b ("r8169: add support for RTL8117") Cc: Heiner Kallweit Cc: Marco Elver Cc: nic_swsd@realtek.com Cc: "David S. Miller" Cc: Eric Dumazet Cc: Jakub Kicinski Cc: Paolo Abeni Cc: netdev@vger.kernel.org Cc: linux-kernel@vger.kernel.org Link: https://lore.kernel.org/lkml/20231028005153.2180411-1-mirsad.todorovac@alu.unizg.hr/ Link: https://lore.kernel.org/lkml/20231028110459.2644926-1-mirsad.todorovac@alu.unizg.hr/ Signed-off-by: Mirsad Goran Todorovac --- v5: added unlocked primitives to allow mac ocs modify grouping applied coalescing of mac ocp writes/modifies for 8168ep and 8117 some formatting fixes to please checkpatch.pl v4: fixed complaints as advised by Heiner and checkpatch.pl split the patch into five sections to be more easily manipulated and reviewed introduced r8168_mac_ocp_write_seq() applied coalescing of mac ocp writes/modifies for 8168H, 8125 and 8125B v3: removed register/mask pair array sentinels, so using ARRAY_SIZE(). avoided duplication of RTL_W32() call code as advised by Heiner. drivers/net/ethernet/realtek/r8169_main.c | 24 ++++++++++++++--------- 1 file changed, 15 insertions(+), 9 deletions(-) diff --git a/drivers/net/ethernet/realtek/r8169_main.c b/drivers/net/ethernet/realtek/r8169_main.c index 27016aaeb6a0..50fbacb05953 100644 --- a/drivers/net/ethernet/realtek/r8169_main.c +++ b/drivers/net/ethernet/realtek/r8169_main.c @@ -3348,7 +3348,15 @@ static void rtl_hw_start_8117(struct rtl8169_private *tp) { 0x19, 0x0040, 0x1100 }, { 0x59, 0x0040, 0x1100 }, }; + + static const struct e_info_regdata e_info_8117_wr_1[] = { + { 0xe63e, 0x0001 }, + { 0xe63e, 0x0000 }, + { 0xc094, 0x0000 }, + { 0xc09e, 0x0000 }, + }; int rg_saw_cnt; + unsigned long flags; rtl8168ep_stop_cmac(tp); rtl_ephy_init(tp, e_info_8117); @@ -3388,15 +3396,13 @@ static void rtl_hw_start_8117(struct rtl8169_private *tp) r8168_mac_ocp_modify(tp, 0xd412, 0x0fff, sw_cnt_1ms_ini); } - r8168_mac_ocp_modify(tp, 0xe056, 0x00f0, 0x0070); - r8168_mac_ocp_write(tp, 0xea80, 0x0003); - r8168_mac_ocp_modify(tp, 0xe052, 0x0000, 0x0009); - r8168_mac_ocp_modify(tp, 0xd420, 0x0fff, 0x047f); - - r8168_mac_ocp_write(tp, 0xe63e, 0x0001); - r8168_mac_ocp_write(tp, 0xe63e, 0x0000); - r8168_mac_ocp_write(tp, 0xc094, 0x0000); - r8168_mac_ocp_write(tp, 0xc09e, 0x0000); + raw_spin_lock_irqsave(&tp->mac_ocp_lock, flags); + __r8168_mac_ocp_modify(tp, 0xe056, 0x00f0, 0x0070); + __r8168_mac_ocp_write(tp, 0xea80, 0x0003); + __r8168_mac_ocp_modify(tp, 0xe052, 0x0000, 0x0009); + __r8168_mac_ocp_modify(tp, 0xd420, 0x0fff, 0x047f); + __r8168_mac_ocp_write_seq(tp, e_info_8117_wr_1); + raw_spin_unlock_irqrestore(&tp->mac_ocp_lock, flags); /* firmware is for MAC only */ r8169_apply_firmware(tp); From patchwork Sun Oct 29 18:36:05 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Mirsad Todorovac X-Patchwork-Id: 159391 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a59:d641:0:b0:403:3b70:6f57 with SMTP id cy1csp1811588vqb; Sun, 29 Oct 2023 11:44:34 -0700 (PDT) X-Google-Smtp-Source: AGHT+IFFM3Tqn4F5g0/mJrzZOSGvbDrpJqBRwNpX+lwWKlcUsfNjj2iZK7QGs1On9POOATMGnx8u X-Received: by 2002:a05:6871:60d:b0:1ef:cedd:5c32 with SMTP id w13-20020a056871060d00b001efcedd5c32mr1825616oan.3.1698605074554; Sun, 29 Oct 2023 11:44:34 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1698605074; cv=none; d=google.com; s=arc-20160816; b=qstjAiJYEgzW4nMscRPO7BmxFmqi93pSYmVpPUqyP1stSzD/O4C5p1mzzhn3Zd4Opa 8QWeyddiAN349zuHo9kl9HfeqvHEK2ikqbX/DwTOyb93RCDwhN/vgvUntQlPaAWmesdh iknQEuw7Gf/HhFyMVbIN2KMlbOWe2N1u5fETYQd2MdslW4OHaJmHPJUPGnolBbW1/MW2 JBZ0pqOeVeeXaMTuyDbeYFDhigJEvB5ffi4wCm/cHEKyHxVO71r8BpX+0cT+kZgcXowI EWosqE5DEFW95n6JAphBW85Z3M66EZAVlFnULO+GIYGYiCFw1eRh++jh+in3SkOiQaOb jVvA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :references:in-reply-to:message-id:date:subject:cc:to:from :dkim-signature:dkim-signature; bh=Asl/6IUeLXRnDB289XIVsKuj7d8rg64WKlxgVsYJA7s=; fh=SsNJs69sMYlYTeWQYB3Y6uFVnk1BYEiSEalBcmc5mfg=; b=rPNWZpx5wU/APtWkd//Vth00mA7DY+pHWsPcEFYn8oEHPVqWixU79OqEuKwnpK/r5e xSuSGuLHpPzgVOWRowxg4wRwrbJ2uJaZTfsW+TopsvQJNwsZBDb/+fW0o05IJxyXIskh cT8gB+aJLkiI5Yt56/qScjHho0Fbh5Z0oexqwW6J3qOAntjxFqdze6naUCIcmOr/dCWF f9UxwlfJTwsdLtU9qaQlTBlwGT5E/vwnP3f3Gn7dKl2ygQgxNGe37GITj8bulfa6BYz2 1QaYfX+VMwfcWBdruQ/h6FyuXrc7O/o8CNI8whZnXBS1XLcXQ5L86+0uTEfV/mjT73CI iqwQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=fail header.i=@alu.unizg.hr header.s=mail header.b=I4oglD+g; dkim=fail header.i=@alu.unizg.hr header.s=mail header.b=VGwNHyBR; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.36 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=alu.unizg.hr Received: from pete.vger.email (pete.vger.email. [23.128.96.36]) by mx.google.com with ESMTPS id n5-20020a632705000000b005a073e0cc9asi3994262pgn.803.2023.10.29.11.44.34 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 29 Oct 2023 11:44:34 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.36 as permitted sender) client-ip=23.128.96.36; Authentication-Results: mx.google.com; dkim=fail header.i=@alu.unizg.hr header.s=mail header.b=I4oglD+g; dkim=fail header.i=@alu.unizg.hr header.s=mail header.b=VGwNHyBR; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.36 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=alu.unizg.hr Received: from out1.vger.email (depot.vger.email [IPv6:2620:137:e000::3:0]) by pete.vger.email (Postfix) with ESMTP id EB32C80621F9; Sun, 29 Oct 2023 11:44:30 -0700 (PDT) X-Virus-Status: Clean X-Virus-Scanned: clamav-milter 0.103.10 at pete.vger.email Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S230345AbjJ2SoD (ORCPT + 30 others); Sun, 29 Oct 2023 14:44:03 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:53372 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S230349AbjJ2SoC (ORCPT ); Sun, 29 Oct 2023 14:44:02 -0400 Received: from domac.alu.hr (domac.alu.unizg.hr [IPv6:2001:b68:2:2800::3]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 5A8D8BD; Sun, 29 Oct 2023 11:43:59 -0700 (PDT) Received: from localhost (localhost [127.0.0.1]) by domac.alu.hr (Postfix) with ESMTP id 16B6860173; Sun, 29 Oct 2023 19:43:58 +0100 (CET) DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=alu.unizg.hr; s=mail; t=1698605038; bh=kTrKI+RYDHwLvsOjwX6EC4uYyc8dF8fc3KgwnN4pF48=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=I4oglD+gqpjI8GSCMer9UN+MuG+hXIz8uXZFJJEw3nnWIkPXGyW2n8wjDEb8RgUjx huZ1sKRup2wQgqUoj/BZClV74pLhoxZrxz2PNI0h67YQ3cq42uN5qy2/G8+Kec6TXW rc6LkYoCauAeYpYSERe3YJ34vehPhQvauhbI7UNto+Dpvg+j67Q2neuVMOyCSwYamG FrXZ1HsI+wlpjYeGfRyPAchQMlqG+tIBET+3cdqTBAyw0b9ZOCGWZvDqrr2N55UlhN 4gkdROdFyS2I7DSllbDltaSNFsL9nc4wutWOZtMnKIVGBWgWqqL5YvfqjbJpB1wfeM pmNxhR48JCzjw== X-Virus-Scanned: Debian amavisd-new at domac.alu.hr Received: from domac.alu.hr ([127.0.0.1]) by localhost (domac.alu.hr [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id yBSS37-Hzjdw; Sun, 29 Oct 2023 19:43:55 +0100 (CET) Received: from defiant.home (78-3-40-247.adsl.net.t-com.hr [78.3.40.247]) by domac.alu.hr (Postfix) with ESMTPSA id 6A74A60182; Sun, 29 Oct 2023 19:43:55 +0100 (CET) DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=alu.unizg.hr; s=mail; t=1698605035; bh=kTrKI+RYDHwLvsOjwX6EC4uYyc8dF8fc3KgwnN4pF48=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=VGwNHyBRNsEywjflWi+92J6548s7A+Jtky6QkTblA5IKLHHu2reR8JaahD3hERPhf 9kYXlgVxy6ZOZhEg4HUckw7qMcxIggx25rgp6A9M+dznlRwgHPwTlleEv5BWcz+UQr 2aGJKQGNe+tB1oR2bGB3u3sHhAfsd9JA4DAv6Gwi3bzy1WM2BV1tDEQmZF5nugXFzx 0dczvI/gF8Oh57W3h7gUBOAL2J2YUMJmEZE0yzSMzkWZhA+oCoVTOqjTh2ayO8AQo3 Z+Tv1RPONMRfgPzYFjuI586MJBmSV5fkZpM8oXZ0DoXsyGntAeVnGbcNpvRb8Gkp9u AIeH/GtHsWUTQ== From: Mirsad Goran Todorovac To: Jason Gunthorpe , Joerg Roedel , Lu Baolu , iommu@lists.linux.dev, linux-kernel@vger.kernel.org, netdev@vger.kernel.org Cc: Joerg Roedel , Will Deacon , Robin Murphy , Heiner Kallweit , nic_swsd@realtek.com, "David S. Miller" , Eric Dumazet , Jakub Kicinski , Paolo Abeni , Mirsad Goran Todorovac , Marco Elver Subject: [PATCH v5 6/7] r8169: Coalesce mac ocp write and modify for 8125 and 8125B start to reduce spinlocks Date: Sun, 29 Oct 2023 19:36:05 +0100 Message-Id: <20231029183600.451694-6-mirsad.todorovac@alu.unizg.hr> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20231029183600.451694-1-mirsad.todorovac@alu.unizg.hr> References: <20231029183600.451694-1-mirsad.todorovac@alu.unizg.hr> MIME-Version: 1.0 X-Spam-Status: No, score=-0.6 required=5.0 tests=DKIM_INVALID,DKIM_SIGNED, HEADER_FROM_DIFFERENT_DOMAINS,MAILING_LIST_MULTI,SPF_HELO_NONE, SPF_PASS autolearn=unavailable autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on pete.vger.email Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org X-Greylist: Sender passed SPF test, not delayed by milter-greylist-4.6.4 (pete.vger.email [0.0.0.0]); Sun, 29 Oct 2023 11:44:31 -0700 (PDT) X-getmail-retrieved-from-mailbox: INBOX X-GMAIL-THRID: 1781116514604537246 X-GMAIL-MSGID: 1781116514604537246 Repeated calls to r8168_mac_ocp_write() and r8168_mac_ocp_modify() in the startup of 8125 and 8125B involve implicit spin_lock_irqsave() and spin_unlock_irqrestore() on each invocation. Coalesced with the corresponding helpers r8168_mac_ocp_write_seq() and r8168_mac_ocp_modify_seq() into sequential write or modidy with a sinqle pair of spin_lock_irqsave() and spin_unlock_irqrestore(), these calls reduce overall lock contention. Fixes: f1bce4ad2f1ce ("r8169: add support for RTL8125") Fixes: 0439297be9511 ("r8169: add support for RTL8125B") Cc: Heiner Kallweit Cc: Marco Elver Cc: nic_swsd@realtek.com Cc: "David S. Miller" Cc: Eric Dumazet Cc: Jakub Kicinski Cc: Paolo Abeni Cc: netdev@vger.kernel.org Cc: linux-kernel@vger.kernel.org Link: https://lore.kernel.org/lkml/20231028005153.2180411-1-mirsad.todorovac@alu.unizg.hr/ Link: https://lore.kernel.org/lkml/20231028110459.2644926-1-mirsad.todorovac@alu.unizg.hr/ Signed-off-by: Mirsad Goran Todorovac --- v5: added unlocked primitives to allow mac ocs modify grouping applied coalescing of mac ocp writes/modifies for 8168ep and 8117 some formatting fixes to please checkpatch.pl v4: fixed complaints as advised by Heiner and checkpatch.pl split the patch into five sections to be more easily manipulated and reviewed introduced r8168_mac_ocp_write_seq() applied coalescing of mac ocp writes/modifies for 8168H, 8125 and 8125B v3: removed register/mask pair array sentinels, so using ARRAY_SIZE(). avoided duplication of RTL_W32() call code as advised by Heiner. drivers/net/ethernet/realtek/r8169_main.c | 75 +++++++++++++---------- 1 file changed, 44 insertions(+), 31 deletions(-) diff --git a/drivers/net/ethernet/realtek/r8169_main.c b/drivers/net/ethernet/realtek/r8169_main.c index 50fbacb05953..0778cd0ba2e0 100644 --- a/drivers/net/ethernet/realtek/r8169_main.c +++ b/drivers/net/ethernet/realtek/r8169_main.c @@ -3553,6 +3553,28 @@ DECLARE_RTL_COND(rtl_mac_ocp_e00e_cond) static void rtl_hw_start_8125_common(struct rtl8169_private *tp) { + static const struct e_info_regmaskset e_info_8125_common_1[] = { + { 0xd3e2, 0x0fff, 0x03a9 }, + { 0xd3e4, 0x00ff, 0x0000 }, + { 0xe860, 0x0000, 0x0080 }, + }; + + static const struct e_info_regmaskset e_info_8125_common_2[] = { + { 0xc0b4, 0x0000, 0x000c }, + { 0xeb6a, 0x00ff, 0x0033 }, + { 0xeb50, 0x03e0, 0x0040 }, + { 0xe056, 0x00f0, 0x0030 }, + { 0xe040, 0x1000, 0x0000 }, + { 0xea1c, 0x0003, 0x0001 }, + { 0xe0c0, 0x4f0f, 0x4403 }, + { 0xe052, 0x0080, 0x0068 }, + { 0xd430, 0x0fff, 0x047f }, + { 0xea1c, 0x0004, 0x0000 }, + { 0xeb54, 0x0000, 0x0001 }, + }; + + unsigned long flags; + rtl_pcie_state_l2l3_disable(tp); RTL_W16(tp, 0x382, 0x221b); @@ -3560,47 +3582,38 @@ static void rtl_hw_start_8125_common(struct rtl8169_private *tp) RTL_W16(tp, 0x4800, 0); /* disable UPS */ - r8168_mac_ocp_modify(tp, 0xd40a, 0x0010, 0x0000); + + raw_spin_lock_irqsave(&tp->mac_ocp_lock, flags); + __r8168_mac_ocp_modify(tp, 0xd40a, 0x0010, 0x0000); RTL_W8(tp, Config1, RTL_R8(tp, Config1) & ~0x10); - r8168_mac_ocp_write(tp, 0xc140, 0xffff); - r8168_mac_ocp_write(tp, 0xc142, 0xffff); + __r8168_mac_ocp_write(tp, 0xc140, 0xffff); + __r8168_mac_ocp_write(tp, 0xc142, 0xffff); - r8168_mac_ocp_modify(tp, 0xd3e2, 0x0fff, 0x03a9); - r8168_mac_ocp_modify(tp, 0xd3e4, 0x00ff, 0x0000); - r8168_mac_ocp_modify(tp, 0xe860, 0x0000, 0x0080); + __r8168_mac_ocp_modify_seq(tp, e_info_8125_common_1); /* disable new tx descriptor format */ - r8168_mac_ocp_modify(tp, 0xeb58, 0x0001, 0x0000); + __r8168_mac_ocp_modify(tp, 0xeb58, 0x0001, 0x0000); - if (tp->mac_version == RTL_GIGA_MAC_VER_63) - r8168_mac_ocp_modify(tp, 0xe614, 0x0700, 0x0200); - else - r8168_mac_ocp_modify(tp, 0xe614, 0x0700, 0x0400); + if (tp->mac_version == RTL_GIGA_MAC_VER_63) { + __r8168_mac_ocp_modify(tp, 0xe614, 0x0700, 0x0200); + __r8168_mac_ocp_modify(tp, 0xe63e, 0x0c30, 0x0000); + } else { + __r8168_mac_ocp_modify(tp, 0xe614, 0x0700, 0x0400); + __r8168_mac_ocp_modify(tp, 0xe63e, 0x0c30, 0x0020); + } + + __r8168_mac_ocp_modify_seq(tp, e_info_8125_common_2); + raw_spin_unlock_irqrestore(&tp->mac_ocp_lock, flags); - if (tp->mac_version == RTL_GIGA_MAC_VER_63) - r8168_mac_ocp_modify(tp, 0xe63e, 0x0c30, 0x0000); - else - r8168_mac_ocp_modify(tp, 0xe63e, 0x0c30, 0x0020); - - r8168_mac_ocp_modify(tp, 0xc0b4, 0x0000, 0x000c); - r8168_mac_ocp_modify(tp, 0xeb6a, 0x00ff, 0x0033); - r8168_mac_ocp_modify(tp, 0xeb50, 0x03e0, 0x0040); - r8168_mac_ocp_modify(tp, 0xe056, 0x00f0, 0x0030); - r8168_mac_ocp_modify(tp, 0xe040, 0x1000, 0x0000); - r8168_mac_ocp_modify(tp, 0xea1c, 0x0003, 0x0001); - r8168_mac_ocp_modify(tp, 0xe0c0, 0x4f0f, 0x4403); - r8168_mac_ocp_modify(tp, 0xe052, 0x0080, 0x0068); - r8168_mac_ocp_modify(tp, 0xd430, 0x0fff, 0x047f); - - r8168_mac_ocp_modify(tp, 0xea1c, 0x0004, 0x0000); - r8168_mac_ocp_modify(tp, 0xeb54, 0x0000, 0x0001); udelay(1); - r8168_mac_ocp_modify(tp, 0xeb54, 0x0001, 0x0000); - RTL_W16(tp, 0x1880, RTL_R16(tp, 0x1880) & ~0x0030); - r8168_mac_ocp_write(tp, 0xe098, 0xc302); + raw_spin_lock_irqsave(&tp->mac_ocp_lock, flags); + __r8168_mac_ocp_modify(tp, 0xeb54, 0x0001, 0x0000); + RTL_W16(tp, 0x1880, RTL_R16(tp, 0x1880) & ~0x0030); + __r8168_mac_ocp_write(tp, 0xe098, 0xc302); + raw_spin_unlock_irqrestore(&tp->mac_ocp_lock, flags); rtl_loop_wait_low(tp, &rtl_mac_ocp_e00e_cond, 1000, 10); From patchwork Sun Oct 29 18:36:07 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Mirsad Todorovac X-Patchwork-Id: 159392 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a59:d641:0:b0:403:3b70:6f57 with SMTP id cy1csp1811632vqb; Sun, 29 Oct 2023 11:44:53 -0700 (PDT) X-Google-Smtp-Source: AGHT+IGGSI3VNafbJaQQ0qMBoZS7WX0mfpErF09AY8Trt8f4TAG2PT5PHr1tsC85NRi1MWycHujx X-Received: by 2002:a05:6e02:12e6:b0:352:749b:720e with SMTP id l6-20020a056e0212e600b00352749b720emr11946745iln.12.1698605093674; Sun, 29 Oct 2023 11:44:53 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1698605093; cv=none; d=google.com; s=arc-20160816; b=PkZnYqDauWNMtKVSR94zZmmhhyNP0obbLVC9ZnGWA2mLXCIHzrKMjeid1Q8P4M7bvO sA9WiIemGBVV6PmuOCQHQJ8QWPwjpLyRIXN6j6QP5Qt0FTMTpiy2ma1E3WBzk/wwxEN9 VWlLGfT+L8Q7CXxzsnTXLPs5iqen5zncr2kfWYI9bO5q7Ha6bXdWVMlLrYyk+P1hvfsS zjiPvnSfdT/I6XDNpyhhcq3N3j7jC9g1Y8W4WGuNBqDGUtCKjbeJzyJUcJzZI+L9qQ9y wtJl3khWBg1Cwex+OQUj7hXG8t3KE3qusulCo73dLysDaiVNQ9eVJoVHptf8PBHbiRfZ c8SA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :references:in-reply-to:message-id:date:subject:cc:to:from :dkim-signature:dkim-signature; bh=z4rItQ6jZ/3cTlm51+MQYq6Bkb/JSVFH2SwJFpJOpRM=; fh=SsNJs69sMYlYTeWQYB3Y6uFVnk1BYEiSEalBcmc5mfg=; b=txTEgHiHJOSwXKGc6zL4ndPOL7x4S58T+CkZRgg6ZBcAYvAJpRERSdOgDx6Lkd2Sdq XtBB7nSRb3cal3I4XxT3yyWUH50khi/3OaxqSD+2wTUWbcm0sdKMnkkyj1fgruLl+J73 IIuRyX0kKMahUfsNpvlqEbznYxBx/74Ej4h5e5Nxohmhygrj+IbYmIVzNuzEhr2srVH/ 4hmpjB0ZppY+kfK6NaIAbUsl4J0iuvS5nYr/UAEQgyV3CY+lcQKEwY0Fl+pCKhtveip+ mZMwxAosKMrInY/qg8Q+CDFWWNH5jQ9kOrwq5ZO2gNhoZa11tozROoOhBXOiA7OENW7x zxBQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=fail header.i=@alu.unizg.hr header.s=mail header.b=ItLZKwEh; dkim=fail header.i=@alu.unizg.hr header.s=mail header.b=HxnHPYwq; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::3:6 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=alu.unizg.hr Received: from pete.vger.email (pete.vger.email. [2620:137:e000::3:6]) by mx.google.com with ESMTPS id q11-20020a170902f34b00b001c41515c4c7si3976278ple.115.2023.10.29.11.44.53 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 29 Oct 2023 11:44:53 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::3:6 as permitted sender) client-ip=2620:137:e000::3:6; Authentication-Results: mx.google.com; dkim=fail header.i=@alu.unizg.hr header.s=mail header.b=ItLZKwEh; dkim=fail header.i=@alu.unizg.hr header.s=mail header.b=HxnHPYwq; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::3:6 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=alu.unizg.hr Received: from out1.vger.email (depot.vger.email [IPv6:2620:137:e000::3:0]) by pete.vger.email (Postfix) with ESMTP id 2C68E805DC6E; Sun, 29 Oct 2023 11:44:46 -0700 (PDT) X-Virus-Status: Clean X-Virus-Scanned: clamav-milter 0.103.10 at pete.vger.email Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S230343AbjJ2SoQ (ORCPT + 30 others); Sun, 29 Oct 2023 14:44:16 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:53442 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S230349AbjJ2SoP (ORCPT ); Sun, 29 Oct 2023 14:44:15 -0400 Received: from domac.alu.hr (domac.alu.unizg.hr [IPv6:2001:b68:2:2800::3]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 580BDF4; Sun, 29 Oct 2023 11:44:12 -0700 (PDT) Received: from localhost (localhost [127.0.0.1]) by domac.alu.hr (Postfix) with ESMTP id A332560186; Sun, 29 Oct 2023 19:44:10 +0100 (CET) DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=alu.unizg.hr; s=mail; t=1698605050; bh=lWCoCvbUwweuJllhVc2Ec84nBLwDbguF5xGDvVkqiA4=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=ItLZKwEh5QuJQNa21MHspcbicxZ1+MvUztWkwbqtHypzFHAhdJUTfhCfcUPTCtDch OtDEP/cymvaZd4mkI57TSrDr7TNamyi+YFE56FafqhKlD0207S2gkPQYHhAuTuvDrO gYnLeDCIefuDYO2dfW/wWz8wX8hwvEHX4h7wTn8b2SI4kx5135P0Z6td5OQ+v34m7q WAmKvTacH6SmawU2Q+AaO0TyO3MaxxSR8bYc3SGFBywZr4//RiRgKmTe6JGz5fysQr 0c6/yb5Ior4xkCzCf8brBibhSsP8uH4wEZa/WC7PaLb9PBTdM2PpVObK16lFC/7EHC XVDjOuGHs45WA== X-Virus-Scanned: Debian amavisd-new at domac.alu.hr Received: from domac.alu.hr ([127.0.0.1]) by localhost (domac.alu.hr [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id qBPRaj9kwNHs; Sun, 29 Oct 2023 19:44:08 +0100 (CET) Received: from defiant.home (78-3-40-247.adsl.net.t-com.hr [78.3.40.247]) by domac.alu.hr (Postfix) with ESMTPSA id 2427160182; Sun, 29 Oct 2023 19:44:08 +0100 (CET) DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=alu.unizg.hr; s=mail; t=1698605048; bh=lWCoCvbUwweuJllhVc2Ec84nBLwDbguF5xGDvVkqiA4=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=HxnHPYwqS+I/I2+wn2jv1AIZiOgO2Z9+UthCCwYm3ryH1ttBb61EGGCA1e3alUJEa pPNSWPVWp+Rf/Au6alR6nfkdaLhiaOwOffpV6N8Mon9zwT8EGoXIHxaVeQGEv2KJNW Y34F+RGpyxneER1gkJeg9i40fRRWX915Jgz9Y2SQSVnrh5Rn0L9nsSqI5DtrsEYYT1 ZRSdIN+q2iXOcn3kXGW7qqLJssrtT5gYajtnIF5JKrv1DmQPgEmj8uPaaJx6KvVR2I t3RHhyUcVWxQBExcY5t4/dl9xl+/nZaiaT6y4i/jkJfLV/t8ZhKmxXYaaSy4jfyCO6 TcLKyZavVu0lw== From: Mirsad Goran Todorovac To: Jason Gunthorpe , Joerg Roedel , Lu Baolu , iommu@lists.linux.dev, linux-kernel@vger.kernel.org, netdev@vger.kernel.org Cc: Joerg Roedel , Will Deacon , Robin Murphy , Heiner Kallweit , nic_swsd@realtek.com, "David S. Miller" , Eric Dumazet , Jakub Kicinski , Paolo Abeni , Mirsad Goran Todorovac , Marco Elver Subject: [PATCH v5 7/7] r8169: Coalesce mac ocp write and modify for rtl_hw_init_8125 to reduce spinlock contention Date: Sun, 29 Oct 2023 19:36:07 +0100 Message-Id: <20231029183600.451694-7-mirsad.todorovac@alu.unizg.hr> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20231029183600.451694-1-mirsad.todorovac@alu.unizg.hr> References: <20231029183600.451694-1-mirsad.todorovac@alu.unizg.hr> MIME-Version: 1.0 X-Spam-Status: No, score=-0.6 required=5.0 tests=DKIM_INVALID,DKIM_SIGNED, HEADER_FROM_DIFFERENT_DOMAINS,MAILING_LIST_MULTI,SPF_HELO_NONE, SPF_PASS autolearn=unavailable autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on pete.vger.email Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org X-Greylist: Sender passed SPF test, not delayed by milter-greylist-4.6.4 (pete.vger.email [0.0.0.0]); Sun, 29 Oct 2023 11:44:46 -0700 (PDT) X-getmail-retrieved-from-mailbox: INBOX X-GMAIL-THRID: 1781116534498345797 X-GMAIL-MSGID: 1781116534498345797 Repeated calls to r8168_mac_ocp_write() and r8168_mac_ocp_modify() in the init sequence of the 8125 involve implicit spin_lock_irqsave() and spin_unlock_irqrestore() on each invocation. Coalesced with the corresponding helpers r8168_mac_ocp_write_seq() and r8168_mac_ocp_modify_seq() into sequential write or modidy with a sinqle pair of spin_lock_irqsave() and spin_unlock_irqrestore(), these calls reduce overall lock contention. Fixes: f1bce4ad2f1ce ("r8169: add support for RTL8125") Cc: Heiner Kallweit Cc: Marco Elver Cc: nic_swsd@realtek.com Cc: "David S. Miller" Cc: Eric Dumazet Cc: Jakub Kicinski Cc: Paolo Abeni Cc: netdev@vger.kernel.org Cc: linux-kernel@vger.kernel.org Link: https://lore.kernel.org/lkml/20231028005153.2180411-1-mirsad.todorovac@alu.unizg.hr/ Link: https://lore.kernel.org/lkml/20231028110459.2644926-1-mirsad.todorovac@alu.unizg.hr/ Signed-off-by: Mirsad Goran Todorovac --- v5: added unlocked primitives to allow mac ocs modify grouping applied coalescing of mac ocp writes/modifies for 8168ep and 8117 some formatting fixes to please checkpatch.pl v4: fixed complaints as advised by Heiner and checkpatch.pl split the patch into five sections to be more easily manipulated and reviewed introduced r8168_mac_ocp_write_seq() applied coalescing of mac ocp writes/modifies for 8168H, 8125 and 8125B v3: removed register/mask pair array sentinels, so using ARRAY_SIZE(). avoided duplication of RTL_W32() call code as advised by Heiner. drivers/net/ethernet/realtek/r8169_main.c | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/drivers/net/ethernet/realtek/r8169_main.c b/drivers/net/ethernet/realtek/r8169_main.c index 0778cd0ba2e0..76f0f1e13909 100644 --- a/drivers/net/ethernet/realtek/r8169_main.c +++ b/drivers/net/ethernet/realtek/r8169_main.c @@ -5089,6 +5089,12 @@ static void rtl_hw_init_8168g(struct rtl8169_private *tp) static void rtl_hw_init_8125(struct rtl8169_private *tp) { + static const struct e_info_regdata hw_init_8125_1[] = { + { 0xc0aa, 0x07d0 }, + { 0xc0a6, 0x0150 }, + { 0xc01e, 0x5555 }, + }; + rtl_enable_rxdvgate(tp); RTL_W8(tp, ChipCmd, RTL_R8(tp, ChipCmd) & ~(CmdTxEnb | CmdRxEnb)); @@ -5098,9 +5104,7 @@ static void rtl_hw_init_8125(struct rtl8169_private *tp) r8168_mac_ocp_modify(tp, 0xe8de, BIT(14), 0); r8168g_wait_ll_share_fifo_ready(tp); - r8168_mac_ocp_write(tp, 0xc0aa, 0x07d0); - r8168_mac_ocp_write(tp, 0xc0a6, 0x0150); - r8168_mac_ocp_write(tp, 0xc01e, 0x5555); + r8168_mac_ocp_write_seq(tp, hw_init_8125_1); r8168g_wait_ll_share_fifo_ready(tp); }