All of lore.kernel.org
 help / color / mirror / Atom feed
From: Christophe Leroy <christophe.leroy@csgroup.eu>
To: Rasmus Villemoes <rasmus.villemoes@prevas.dk>,
	Li Yang <leoyang.li@nxp.com>,
	"David S. Miller" <davem@davemloft.net>,
	Jakub Kicinski <kuba@kernel.org>
Cc: Vladimir Oltean <vladimir.oltean@nxp.com>,
	linux-kernel@vger.kernel.org, netdev@vger.kernel.org,
	linuxppc-dev@lists.ozlabs.org, Zhao Qiang <qiang.zhao@nxp.com>
Subject: Re: [PATCH 18/20] ethernet: ucc_geth: add helper to replace repeated switch statements
Date: Tue, 8 Dec 2020 16:21:20 +0100	[thread overview]
Message-ID: <ed16ea1d-5017-96bd-c1a9-5201f51231fd@csgroup.eu> (raw)
In-Reply-To: <20201205191744.7847-19-rasmus.villemoes@prevas.dk>



Le 05/12/2020 à 20:17, Rasmus Villemoes a écrit :
> The translation from the ucc_geth_num_of_threads enum value to the
> actual count can be written somewhat more compactly with a small
> lookup table, allowing us to replace the four switch statements.
> 
> Signed-off-by: Rasmus Villemoes <rasmus.villemoes@prevas.dk>
> ---
>   drivers/net/ethernet/freescale/ucc_geth.c | 100 +++++-----------------
>   1 file changed, 22 insertions(+), 78 deletions(-)
> 
> diff --git a/drivers/net/ethernet/freescale/ucc_geth.c b/drivers/net/ethernet/freescale/ucc_geth.c
> index 3aebea191b52..a26d1feb7dab 100644
> --- a/drivers/net/ethernet/freescale/ucc_geth.c
> +++ b/drivers/net/ethernet/freescale/ucc_geth.c
> @@ -70,6 +70,20 @@ static struct {
>   module_param_named(debug, debug.msg_enable, int, 0);
>   MODULE_PARM_DESC(debug, "Debug verbosity level (0=none, ..., 0xffff=all)");
>   
> +static int ucc_geth_thread_count(enum ucc_geth_num_of_threads idx)
> +{
> +	static const u8 count[] = {
> +		[UCC_GETH_NUM_OF_THREADS_1] = 1,
> +		[UCC_GETH_NUM_OF_THREADS_2] = 2,
> +		[UCC_GETH_NUM_OF_THREADS_4] = 4,
> +		[UCC_GETH_NUM_OF_THREADS_6] = 6,
> +		[UCC_GETH_NUM_OF_THREADS_8] = 8,
> +	};
> +	if (idx >= ARRAY_SIZE(count))
> +		return 0;
> +	return count[idx];
> +}

I think you would allow GCC to provide a much better optimisation with something like:

static int ucc_geth_thread_count(enum ucc_geth_num_of_threads idx)
{
	if (idx == UCC_GETH_NUM_OF_THREADS_1)
		return 1;
	if (idx == UCC_GETH_NUM_OF_THREADS_2)
		return 2;
	if (idx == UCC_GETH_NUM_OF_THREADS_4)
		return 4;
	if (idx == UCC_GETH_NUM_OF_THREADS_6)
		return 6;
	if (idx == UCC_GETH_NUM_OF_THREADS_8)
		return 8;
	return 0;
}

> +
>   static const struct ucc_geth_info ugeth_primary_info = {
>   	.uf_info = {
>   		    .rtsm = UCC_FAST_SEND_IDLES_BETWEEN_FRAMES,
> @@ -668,32 +682,12 @@ static void dump_regs(struct ucc_geth_private *ugeth)
>   		in_be32(&ugeth->ug_regs->scam));
>   
>   	if (ugeth->p_thread_data_tx) {
> -		int numThreadsTxNumerical;
> -		switch (ugeth->ug_info->numThreadsTx) {
> -		case UCC_GETH_NUM_OF_THREADS_1:
> -			numThreadsTxNumerical = 1;
> -			break;
> -		case UCC_GETH_NUM_OF_THREADS_2:
> -			numThreadsTxNumerical = 2;
> -			break;
> -		case UCC_GETH_NUM_OF_THREADS_4:
> -			numThreadsTxNumerical = 4;
> -			break;
> -		case UCC_GETH_NUM_OF_THREADS_6:
> -			numThreadsTxNumerical = 6;
> -			break;
> -		case UCC_GETH_NUM_OF_THREADS_8:
> -			numThreadsTxNumerical = 8;
> -			break;
> -		default:
> -			numThreadsTxNumerical = 0;
> -			break;
> -		}
> +		int count = ucc_geth_thread_count(ugeth->ug_info->numThreadsTx);
>   
>   		pr_info("Thread data TXs:\n");
>   		pr_info("Base address: 0x%08x\n",
>   			(u32)ugeth->p_thread_data_tx);
> -		for (i = 0; i < numThreadsTxNumerical; i++) {
> +		for (i = 0; i < count; i++) {
>   			pr_info("Thread data TX[%d]:\n", i);
>   			pr_info("Base address: 0x%08x\n",
>   				(u32)&ugeth->p_thread_data_tx[i]);
> @@ -702,32 +696,12 @@ static void dump_regs(struct ucc_geth_private *ugeth)
>   		}
>   	}
>   	if (ugeth->p_thread_data_rx) {
> -		int numThreadsRxNumerical;
> -		switch (ugeth->ug_info->numThreadsRx) {
> -		case UCC_GETH_NUM_OF_THREADS_1:
> -			numThreadsRxNumerical = 1;
> -			break;
> -		case UCC_GETH_NUM_OF_THREADS_2:
> -			numThreadsRxNumerical = 2;
> -			break;
> -		case UCC_GETH_NUM_OF_THREADS_4:
> -			numThreadsRxNumerical = 4;
> -			break;
> -		case UCC_GETH_NUM_OF_THREADS_6:
> -			numThreadsRxNumerical = 6;
> -			break;
> -		case UCC_GETH_NUM_OF_THREADS_8:
> -			numThreadsRxNumerical = 8;
> -			break;
> -		default:
> -			numThreadsRxNumerical = 0;
> -			break;
> -		}
> +		int count = ucc_geth_thread_count(ugeth->ug_info->numThreadsRx);
>   
>   		pr_info("Thread data RX:\n");
>   		pr_info("Base address: 0x%08x\n",
>   			(u32)ugeth->p_thread_data_rx);
> -		for (i = 0; i < numThreadsRxNumerical; i++) {
> +		for (i = 0; i < count; i++) {
>   			pr_info("Thread data RX[%d]:\n", i);
>   			pr_info("Base address: 0x%08x\n",
>   				(u32)&ugeth->p_thread_data_rx[i]);
> @@ -2315,45 +2289,15 @@ static int ucc_geth_startup(struct ucc_geth_private *ugeth)
>   	uf_regs = uccf->uf_regs;
>   	ug_regs = ugeth->ug_regs;
>   
> -	switch (ug_info->numThreadsRx) {
> -	case UCC_GETH_NUM_OF_THREADS_1:
> -		numThreadsRxNumerical = 1;
> -		break;
> -	case UCC_GETH_NUM_OF_THREADS_2:
> -		numThreadsRxNumerical = 2;
> -		break;
> -	case UCC_GETH_NUM_OF_THREADS_4:
> -		numThreadsRxNumerical = 4;
> -		break;
> -	case UCC_GETH_NUM_OF_THREADS_6:
> -		numThreadsRxNumerical = 6;
> -		break;
> -	case UCC_GETH_NUM_OF_THREADS_8:
> -		numThreadsRxNumerical = 8;
> -		break;
> -	default:
> +	numThreadsRxNumerical = ucc_geth_thread_count(ug_info->numThreadsRx);
> +	if (!numThreadsRxNumerical) {
>   		if (netif_msg_ifup(ugeth))
>   			pr_err("Bad number of Rx threads value\n");
>   		return -EINVAL;
>   	}
>   
> -	switch (ug_info->numThreadsTx) {
> -	case UCC_GETH_NUM_OF_THREADS_1:
> -		numThreadsTxNumerical = 1;
> -		break;
> -	case UCC_GETH_NUM_OF_THREADS_2:
> -		numThreadsTxNumerical = 2;
> -		break;
> -	case UCC_GETH_NUM_OF_THREADS_4:
> -		numThreadsTxNumerical = 4;
> -		break;
> -	case UCC_GETH_NUM_OF_THREADS_6:
> -		numThreadsTxNumerical = 6;
> -		break;
> -	case UCC_GETH_NUM_OF_THREADS_8:
> -		numThreadsTxNumerical = 8;
> -		break;
> -	default:
> +	numThreadsTxNumerical = ucc_geth_thread_count(ug_info->numThreadsTx);
> +	if (!numThreadsTxNumerical) {
>   		if (netif_msg_ifup(ugeth))
>   			pr_err("Bad number of Tx threads value\n");
>   		return -EINVAL;
> 

WARNING: multiple messages have this Message-ID (diff)
From: Christophe Leroy <christophe.leroy@csgroup.eu>
To: Rasmus Villemoes <rasmus.villemoes@prevas.dk>,
	Li Yang <leoyang.li@nxp.com>,
	"David S. Miller" <davem@davemloft.net>,
	Jakub Kicinski <kuba@kernel.org>
Cc: Vladimir Oltean <vladimir.oltean@nxp.com>,
	Zhao Qiang <qiang.zhao@nxp.com>,
	linuxppc-dev@lists.ozlabs.org, linux-kernel@vger.kernel.org,
	netdev@vger.kernel.org
Subject: Re: [PATCH 18/20] ethernet: ucc_geth: add helper to replace repeated switch statements
Date: Tue, 8 Dec 2020 16:21:20 +0100	[thread overview]
Message-ID: <ed16ea1d-5017-96bd-c1a9-5201f51231fd@csgroup.eu> (raw)
In-Reply-To: <20201205191744.7847-19-rasmus.villemoes@prevas.dk>



Le 05/12/2020 à 20:17, Rasmus Villemoes a écrit :
> The translation from the ucc_geth_num_of_threads enum value to the
> actual count can be written somewhat more compactly with a small
> lookup table, allowing us to replace the four switch statements.
> 
> Signed-off-by: Rasmus Villemoes <rasmus.villemoes@prevas.dk>
> ---
>   drivers/net/ethernet/freescale/ucc_geth.c | 100 +++++-----------------
>   1 file changed, 22 insertions(+), 78 deletions(-)
> 
> diff --git a/drivers/net/ethernet/freescale/ucc_geth.c b/drivers/net/ethernet/freescale/ucc_geth.c
> index 3aebea191b52..a26d1feb7dab 100644
> --- a/drivers/net/ethernet/freescale/ucc_geth.c
> +++ b/drivers/net/ethernet/freescale/ucc_geth.c
> @@ -70,6 +70,20 @@ static struct {
>   module_param_named(debug, debug.msg_enable, int, 0);
>   MODULE_PARM_DESC(debug, "Debug verbosity level (0=none, ..., 0xffff=all)");
>   
> +static int ucc_geth_thread_count(enum ucc_geth_num_of_threads idx)
> +{
> +	static const u8 count[] = {
> +		[UCC_GETH_NUM_OF_THREADS_1] = 1,
> +		[UCC_GETH_NUM_OF_THREADS_2] = 2,
> +		[UCC_GETH_NUM_OF_THREADS_4] = 4,
> +		[UCC_GETH_NUM_OF_THREADS_6] = 6,
> +		[UCC_GETH_NUM_OF_THREADS_8] = 8,
> +	};
> +	if (idx >= ARRAY_SIZE(count))
> +		return 0;
> +	return count[idx];
> +}

I think you would allow GCC to provide a much better optimisation with something like:

static int ucc_geth_thread_count(enum ucc_geth_num_of_threads idx)
{
	if (idx == UCC_GETH_NUM_OF_THREADS_1)
		return 1;
	if (idx == UCC_GETH_NUM_OF_THREADS_2)
		return 2;
	if (idx == UCC_GETH_NUM_OF_THREADS_4)
		return 4;
	if (idx == UCC_GETH_NUM_OF_THREADS_6)
		return 6;
	if (idx == UCC_GETH_NUM_OF_THREADS_8)
		return 8;
	return 0;
}

> +
>   static const struct ucc_geth_info ugeth_primary_info = {
>   	.uf_info = {
>   		    .rtsm = UCC_FAST_SEND_IDLES_BETWEEN_FRAMES,
> @@ -668,32 +682,12 @@ static void dump_regs(struct ucc_geth_private *ugeth)
>   		in_be32(&ugeth->ug_regs->scam));
>   
>   	if (ugeth->p_thread_data_tx) {
> -		int numThreadsTxNumerical;
> -		switch (ugeth->ug_info->numThreadsTx) {
> -		case UCC_GETH_NUM_OF_THREADS_1:
> -			numThreadsTxNumerical = 1;
> -			break;
> -		case UCC_GETH_NUM_OF_THREADS_2:
> -			numThreadsTxNumerical = 2;
> -			break;
> -		case UCC_GETH_NUM_OF_THREADS_4:
> -			numThreadsTxNumerical = 4;
> -			break;
> -		case UCC_GETH_NUM_OF_THREADS_6:
> -			numThreadsTxNumerical = 6;
> -			break;
> -		case UCC_GETH_NUM_OF_THREADS_8:
> -			numThreadsTxNumerical = 8;
> -			break;
> -		default:
> -			numThreadsTxNumerical = 0;
> -			break;
> -		}
> +		int count = ucc_geth_thread_count(ugeth->ug_info->numThreadsTx);
>   
>   		pr_info("Thread data TXs:\n");
>   		pr_info("Base address: 0x%08x\n",
>   			(u32)ugeth->p_thread_data_tx);
> -		for (i = 0; i < numThreadsTxNumerical; i++) {
> +		for (i = 0; i < count; i++) {
>   			pr_info("Thread data TX[%d]:\n", i);
>   			pr_info("Base address: 0x%08x\n",
>   				(u32)&ugeth->p_thread_data_tx[i]);
> @@ -702,32 +696,12 @@ static void dump_regs(struct ucc_geth_private *ugeth)
>   		}
>   	}
>   	if (ugeth->p_thread_data_rx) {
> -		int numThreadsRxNumerical;
> -		switch (ugeth->ug_info->numThreadsRx) {
> -		case UCC_GETH_NUM_OF_THREADS_1:
> -			numThreadsRxNumerical = 1;
> -			break;
> -		case UCC_GETH_NUM_OF_THREADS_2:
> -			numThreadsRxNumerical = 2;
> -			break;
> -		case UCC_GETH_NUM_OF_THREADS_4:
> -			numThreadsRxNumerical = 4;
> -			break;
> -		case UCC_GETH_NUM_OF_THREADS_6:
> -			numThreadsRxNumerical = 6;
> -			break;
> -		case UCC_GETH_NUM_OF_THREADS_8:
> -			numThreadsRxNumerical = 8;
> -			break;
> -		default:
> -			numThreadsRxNumerical = 0;
> -			break;
> -		}
> +		int count = ucc_geth_thread_count(ugeth->ug_info->numThreadsRx);
>   
>   		pr_info("Thread data RX:\n");
>   		pr_info("Base address: 0x%08x\n",
>   			(u32)ugeth->p_thread_data_rx);
> -		for (i = 0; i < numThreadsRxNumerical; i++) {
> +		for (i = 0; i < count; i++) {
>   			pr_info("Thread data RX[%d]:\n", i);
>   			pr_info("Base address: 0x%08x\n",
>   				(u32)&ugeth->p_thread_data_rx[i]);
> @@ -2315,45 +2289,15 @@ static int ucc_geth_startup(struct ucc_geth_private *ugeth)
>   	uf_regs = uccf->uf_regs;
>   	ug_regs = ugeth->ug_regs;
>   
> -	switch (ug_info->numThreadsRx) {
> -	case UCC_GETH_NUM_OF_THREADS_1:
> -		numThreadsRxNumerical = 1;
> -		break;
> -	case UCC_GETH_NUM_OF_THREADS_2:
> -		numThreadsRxNumerical = 2;
> -		break;
> -	case UCC_GETH_NUM_OF_THREADS_4:
> -		numThreadsRxNumerical = 4;
> -		break;
> -	case UCC_GETH_NUM_OF_THREADS_6:
> -		numThreadsRxNumerical = 6;
> -		break;
> -	case UCC_GETH_NUM_OF_THREADS_8:
> -		numThreadsRxNumerical = 8;
> -		break;
> -	default:
> +	numThreadsRxNumerical = ucc_geth_thread_count(ug_info->numThreadsRx);
> +	if (!numThreadsRxNumerical) {
>   		if (netif_msg_ifup(ugeth))
>   			pr_err("Bad number of Rx threads value\n");
>   		return -EINVAL;
>   	}
>   
> -	switch (ug_info->numThreadsTx) {
> -	case UCC_GETH_NUM_OF_THREADS_1:
> -		numThreadsTxNumerical = 1;
> -		break;
> -	case UCC_GETH_NUM_OF_THREADS_2:
> -		numThreadsTxNumerical = 2;
> -		break;
> -	case UCC_GETH_NUM_OF_THREADS_4:
> -		numThreadsTxNumerical = 4;
> -		break;
> -	case UCC_GETH_NUM_OF_THREADS_6:
> -		numThreadsTxNumerical = 6;
> -		break;
> -	case UCC_GETH_NUM_OF_THREADS_8:
> -		numThreadsTxNumerical = 8;
> -		break;
> -	default:
> +	numThreadsTxNumerical = ucc_geth_thread_count(ug_info->numThreadsTx);
> +	if (!numThreadsTxNumerical) {
>   		if (netif_msg_ifup(ugeth))
>   			pr_err("Bad number of Tx threads value\n");
>   		return -EINVAL;
> 

  reply	other threads:[~2020-12-08 15:22 UTC|newest]

Thread overview: 102+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2020-12-05 19:17 [PATCH 00/20] ethernet: ucc_geth: assorted fixes and simplifications Rasmus Villemoes
2020-12-05 19:17 ` Rasmus Villemoes
2020-12-05 19:17 ` [PATCH 01/20] ethernet: ucc_geth: set dev->max_mtu to 1518 Rasmus Villemoes
2020-12-05 19:17   ` Rasmus Villemoes
2020-12-10  1:25   ` Andrew Lunn
2020-12-10  1:25     ` Andrew Lunn
2021-01-05 14:17     ` Joakim Tjernlund
2021-01-05 14:17       ` Joakim Tjernlund
2021-01-05 14:33       ` Andrew Lunn
2021-01-05 14:33         ` Andrew Lunn
2021-01-05 14:44         ` Joakim Tjernlund
2021-01-05 14:44           ` Joakim Tjernlund
2021-01-05 14:54           ` Andrew Lunn
2021-01-05 14:54             ` Andrew Lunn
2020-12-05 19:17 ` [PATCH 02/20] ethernet: ucc_geth: fix definition and size of ucc_geth_tx_global_pram Rasmus Villemoes
2020-12-05 19:17   ` Rasmus Villemoes
2020-12-08 19:14   ` Li Yang
2020-12-08 19:14     ` Li Yang
2020-12-08 20:12     ` Rasmus Villemoes
2020-12-08 20:12       ` Rasmus Villemoes
2020-12-05 19:17 ` [PATCH 03/20] ethernet: ucc_geth: remove unused read of temoder field Rasmus Villemoes
2020-12-05 19:17   ` Rasmus Villemoes
2020-12-05 19:17 ` [PATCH 04/20] soc: fsl: qe: make cpm_muram_offset take a const void* argument Rasmus Villemoes
2020-12-05 19:17   ` Rasmus Villemoes
2020-12-05 19:17   ` Rasmus Villemoes
2020-12-05 19:17 ` [PATCH 05/20] soc: fsl: qe: store muram_vbase as a void pointer instead of u8 Rasmus Villemoes
2020-12-05 19:17   ` Rasmus Villemoes
2020-12-05 19:17   ` Rasmus Villemoes
2020-12-05 19:17 ` [PATCH 06/20] soc: fsl: qe: add cpm_muram_free_addr() helper Rasmus Villemoes
2020-12-05 19:17   ` Rasmus Villemoes
2020-12-05 19:17   ` Rasmus Villemoes
2020-12-05 19:17 ` [PATCH 07/20] ethernet: ucc_geth: use qe_muram_free_addr() Rasmus Villemoes
2020-12-05 19:17   ` Rasmus Villemoes
2020-12-10  1:36   ` Andrew Lunn
2020-12-10  1:36     ` Andrew Lunn
2020-12-05 19:17 ` [PATCH 08/20] ethernet: ucc_geth: remove unnecessary memset_io() calls Rasmus Villemoes
2020-12-05 19:17   ` Rasmus Villemoes
2020-12-05 19:17 ` [PATCH 09/20] ethernet: ucc_geth: replace kmalloc+memset by kzalloc Rasmus Villemoes
2020-12-05 19:17   ` Rasmus Villemoes
2020-12-05 19:17 ` [PATCH 10/20] ethernet: ucc_geth: remove {rx,tx}_glbl_pram_offset from struct ucc_geth_private Rasmus Villemoes
2020-12-05 19:17   ` [PATCH 10/20] ethernet: ucc_geth: remove {rx, tx}_glbl_pram_offset " Rasmus Villemoes
2020-12-05 19:17 ` [PATCH 11/20] ethernet: ucc_geth: fix use-after-free in ucc_geth_remove() Rasmus Villemoes
2020-12-05 19:17   ` Rasmus Villemoes
2020-12-05 20:48   ` Jakub Kicinski
2020-12-05 20:48     ` Jakub Kicinski
2020-12-05 21:04     ` Rasmus Villemoes
2020-12-05 21:04       ` Rasmus Villemoes
2020-12-05 21:19       ` Jakub Kicinski
2020-12-05 21:19         ` Jakub Kicinski
2020-12-05 21:35         ` Rasmus Villemoes
2020-12-05 21:35           ` Rasmus Villemoes
2020-12-05 21:50       ` Rasmus Villemoes
2020-12-05 21:50         ` Rasmus Villemoes
2020-12-05 19:17 ` [PATCH 12/20] ethernet: ucc_geth: factor out parsing of {rx,tx}-clock{,-name} properties Rasmus Villemoes
2020-12-05 19:17   ` [PATCH 12/20] ethernet: ucc_geth: factor out parsing of {rx, tx}-clock{, -name} properties Rasmus Villemoes
2020-12-05 19:17 ` [PATCH 13/20] ethernet: ucc_geth: constify ugeth_primary_info Rasmus Villemoes
2020-12-05 19:17   ` Rasmus Villemoes
2020-12-05 19:17 ` [PATCH 14/20] ethernet: ucc_geth: don't statically allocate eight ucc_geth_info Rasmus Villemoes
2020-12-05 19:17   ` Rasmus Villemoes
2020-12-08 15:13   ` Christophe Leroy
2020-12-08 15:13     ` Christophe Leroy
2020-12-08 21:17     ` Rasmus Villemoes
2020-12-08 21:17       ` Rasmus Villemoes
2020-12-05 19:17 ` [PATCH 15/20] ethernet: ucc_geth: use UCC_GETH_{RX,TX}_BD_RING_ALIGNMENT macros directly Rasmus Villemoes
2020-12-05 19:17   ` [PATCH 15/20] ethernet: ucc_geth: use UCC_GETH_{RX, TX}_BD_RING_ALIGNMENT " Rasmus Villemoes
2020-12-08 15:14   ` Christophe Leroy
2020-12-08 15:14     ` Christophe Leroy
2020-12-05 19:17 ` [PATCH 16/20] ethernet: ucc_geth: remove bd_mem_part and all associated code Rasmus Villemoes
2020-12-05 19:17   ` Rasmus Villemoes
2020-12-05 19:17 ` [PATCH 17/20] ethernet: ucc_geth: replace kmalloc_array()+for loop by kcalloc() Rasmus Villemoes
2020-12-05 19:17   ` Rasmus Villemoes
2020-12-05 19:17 ` [PATCH 18/20] ethernet: ucc_geth: add helper to replace repeated switch statements Rasmus Villemoes
2020-12-05 19:17   ` Rasmus Villemoes
2020-12-08 15:21   ` Christophe Leroy [this message]
2020-12-08 15:21     ` Christophe Leroy
2020-12-08 20:55     ` Rasmus Villemoes
2020-12-08 20:55       ` Rasmus Villemoes
2020-12-05 19:17 ` [PATCH 19/20] ethernet: ucc_geth: inform the compiler that numQueues is always 1 Rasmus Villemoes
2020-12-05 19:17   ` Rasmus Villemoes
2020-12-05 19:17 ` [PATCH 20/20] ethernet: ucc_geth: simplify rx/tx allocations Rasmus Villemoes
2020-12-05 19:17   ` Rasmus Villemoes
2020-12-05 20:53 ` [PATCH 00/20] ethernet: ucc_geth: assorted fixes and simplifications Jakub Kicinski
2020-12-05 20:53   ` Jakub Kicinski
2020-12-05 20:53   ` Jakub Kicinski
2020-12-05 21:11   ` Rasmus Villemoes
2020-12-05 21:11     ` Rasmus Villemoes
2020-12-05 21:11     ` Rasmus Villemoes
2020-12-05 21:27     ` Jakub Kicinski
2020-12-05 21:27       ` Jakub Kicinski
2020-12-05 21:27       ` Jakub Kicinski
2020-12-05 21:36       ` Rasmus Villemoes
2020-12-05 21:36         ` Rasmus Villemoes
2020-12-05 21:36         ` Rasmus Villemoes
2020-12-10  7:52       ` Rasmus Villemoes
2020-12-10  7:52         ` Rasmus Villemoes
2020-12-10  7:52         ` Rasmus Villemoes
2020-12-08  3:07     ` Qiang Zhao
2020-12-08  3:07       ` Qiang Zhao
2020-12-08  3:07       ` Qiang Zhao
2020-12-08  8:13       ` Rasmus Villemoes
2020-12-08  8:13         ` Rasmus Villemoes
2020-12-08  8:13         ` Rasmus Villemoes

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=ed16ea1d-5017-96bd-c1a9-5201f51231fd@csgroup.eu \
    --to=christophe.leroy@csgroup.eu \
    --cc=davem@davemloft.net \
    --cc=kuba@kernel.org \
    --cc=leoyang.li@nxp.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linuxppc-dev@lists.ozlabs.org \
    --cc=netdev@vger.kernel.org \
    --cc=qiang.zhao@nxp.com \
    --cc=rasmus.villemoes@prevas.dk \
    --cc=vladimir.oltean@nxp.com \
    /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.