All of lore.kernel.org
 help / color / mirror / Atom feed
From: Heiner Kallweit <hkallweit1@gmail.com>
To: Mirsad Goran Todorovac <mirsad.todorovac@alu.unizg.hr>,
	Jason Gunthorpe <jgg@ziepe.ca>, Joerg Roedel <jroedel@suse.de>,
	Lu Baolu <baolu.lu@linux.intel.com>,
	iommu@lists.linux.dev, linux-kernel@vger.kernel.org,
	netdev@vger.kernel.org
Cc: Joerg Roedel <joro@8bytes.org>, Will Deacon <will@kernel.org>,
	Robin Murphy <robin.murphy@arm.com>,
	nic_swsd@realtek.com, "David S. Miller" <davem@davemloft.net>,
	Eric Dumazet <edumazet@google.com>,
	Jakub Kicinski <kuba@kernel.org>, Paolo Abeni <pabeni@redhat.com>,
	Marco Elver <elver@google.com>
Subject: Re: [PATCH v5 5/7] r8169: Reduce spinlock contention for the start of RTL8117
Date: Mon, 30 Oct 2023 14:51:43 +0100	[thread overview]
Message-ID: <459f8e54-419e-4e03-8c6c-250eba8889cc@gmail.com> (raw)
In-Reply-To: <20231029183600.451694-5-mirsad.todorovac@alu.unizg.hr>

On 29.10.2023 19:36, Mirsad Goran Todorovac wrote:
> 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 <hkallweit1@gmail.com>
> Cc: Marco Elver <elver@google.com>
> Cc: nic_swsd@realtek.com
> Cc: "David S. Miller" <davem@davemloft.net>
> Cc: Eric Dumazet <edumazet@google.com>
> Cc: Jakub Kicinski <kuba@kernel.org>
> Cc: Paolo Abeni <pabeni@redhat.com>
> 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 <mirsad.todorovac@alu.unizg.hr>
> ---
> 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);

Same

  reply	other threads:[~2023-10-30 14:04 UTC|newest]

Thread overview: 19+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2023-10-29 18:35 [PATCH v5 1/7] r8169: Add r8169_mac_ocp_(write|modify)_seq helpers to reduce spinlock contention Mirsad Goran Todorovac
2023-10-29 18:35 ` [PATCH v5 2/7] r8169: Coalesce RTL8411b PHY power-down recovery calls " Mirsad Goran Todorovac
2023-10-30 13:48   ` Heiner Kallweit
2023-10-29 18:35 ` [PATCH v5 3/7] r8169: Coalesce mac ocp write and modify for 8168H start " Mirsad Goran Todorovac
2023-10-30 13:50   ` Heiner Kallweit
2023-10-29 18:36 ` [PATCH v5 4/7] r8169: Coalesce mac ocp write and modify for 8168ep " Mirsad Goran Todorovac
2023-10-30 13:51   ` Heiner Kallweit
2023-10-29 18:36 ` [PATCH v5 5/7] r8169: Reduce spinlock contention for the start of RTL8117 Mirsad Goran Todorovac
2023-10-30 13:51   ` Heiner Kallweit [this message]
2023-10-29 18:36 ` [PATCH v5 6/7] r8169: Coalesce mac ocp write and modify for 8125 and 8125B start to reduce spinlocks Mirsad Goran Todorovac
2023-10-30 14:02   ` Heiner Kallweit
2023-10-30 15:02     ` Mirsad Todorovac
2023-10-30 15:53       ` Heiner Kallweit
2023-10-31  8:23       ` Akira Yokosawa
2023-10-31 13:39         ` Mirsad Todorovac
2023-11-26  1:42         ` Mirsad Todorovac
2023-10-29 18:36 ` [PATCH v5 7/7] r8169: Coalesce mac ocp write and modify for rtl_hw_init_8125 to reduce spinlock contention Mirsad Goran Todorovac
2023-10-30 14:03   ` Heiner Kallweit
2023-10-30 13:39 ` [PATCH v5 1/7] r8169: Add r8169_mac_ocp_(write|modify)_seq helpers " Heiner Kallweit

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=459f8e54-419e-4e03-8c6c-250eba8889cc@gmail.com \
    --to=hkallweit1@gmail.com \
    --cc=baolu.lu@linux.intel.com \
    --cc=davem@davemloft.net \
    --cc=edumazet@google.com \
    --cc=elver@google.com \
    --cc=iommu@lists.linux.dev \
    --cc=jgg@ziepe.ca \
    --cc=joro@8bytes.org \
    --cc=jroedel@suse.de \
    --cc=kuba@kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=mirsad.todorovac@alu.unizg.hr \
    --cc=netdev@vger.kernel.org \
    --cc=nic_swsd@realtek.com \
    --cc=pabeni@redhat.com \
    --cc=robin.murphy@arm.com \
    --cc=will@kernel.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.