Re: [PATCH v7 3/3] net: ax88796c: ASIX AX88796C SPI Ethernet Adapter Driver

2020-12-02 Thread Lukasz Stelmach
It was <2020-12-02 śro 09:18>, when Jakub Kicinski wrote:
> On Wed, 02 Dec 2020 11:46:28 +0100 Lukasz Stelmach wrote:
>> >> + status = netif_rx(skb);  
>> >
>> > If I'm reading things right this is in process context, so netif_rx_ni()
>> >  
>> 
>> Is it? The stack looks as follows
>> 
>> ax88796c_skb_return()
>> ax88796c_rx_fixup()
>> ax88796c_receive()
>> ax88796c_process_isr()
>> ax88796c_work()
>> 
>> and ax88796c_work() is a scheduled in the system_wq.
>
> Are you asking if work queue gets run in process context? It does.
>

Thanks. Changed.

>> >> + if (status != NET_RX_SUCCESS)
>> >> + netif_info(ax_local, rx_err, ndev,
>> >> +"netif_rx status %d\n", status);  
>> >
>> > Again, it's inadvisable to put per packet prints without any rate
>> > limiting in the data path.  
>> 
>> Even if limmited by the msglvl flag, which is off by default?
>
> I'd err on the side of caution, but up to you.
>

It isn't very common, but a few drivers do this.

Thank you.
-- 
Łukasz Stelmach
Samsung R Institute Poland
Samsung Electronics


signature.asc
Description: PGP signature


Re: [PATCH v7 3/3] net: ax88796c: ASIX AX88796C SPI Ethernet Adapter Driver

2020-12-02 Thread Jakub Kicinski
On Wed, 02 Dec 2020 11:46:28 +0100 Lukasz Stelmach wrote:
> >> +  status = netif_rx(skb);  
> >
> > If I'm reading things right this is in process context, so netif_rx_ni()
> >  
> 
> Is it? The stack looks as follows
> 
> ax88796c_skb_return()
> ax88796c_rx_fixup()
> ax88796c_receive()
> ax88796c_process_isr()
> ax88796c_work()
> 
> and ax88796c_work() is a scheduled in the system_wq.

Are you asking if work queue gets run in process context? It does.

> >> +  if (status != NET_RX_SUCCESS)
> >> +  netif_info(ax_local, rx_err, ndev,
> >> + "netif_rx status %d\n", status);  
> >
> > Again, it's inadvisable to put per packet prints without any rate
> > limiting in the data path.  
> 
> Even if limmited by the msglvl flag, which is off by default?

I'd err on the side of caution, but up to you.


Re: [PATCH v7 3/3] net: ax88796c: ASIX AX88796C SPI Ethernet Adapter Driver

2020-12-02 Thread Lukasz Stelmach
It was <2020-11-25 śro 13:26>, when Jakub Kicinski wrote:
> On Tue, 24 Nov 2020 13:03:30 +0100 Łukasz Stelmach wrote:
>> +static int
>> +ax88796c_start_xmit(struct sk_buff *skb, struct net_device *ndev)
>> +{
>> +struct ax88796c_device *ax_local = to_ax88796c_device(ndev);
>> +
>> +skb_queue_tail(_local->tx_wait_q, skb);
>> +if (skb_queue_len(_local->tx_wait_q) > TX_QUEUE_HIGH_WATER) {
>> +netif_err(ax_local, tx_queued, ndev,
>> +  "Too many TX packets in queue %d\n",
>> +  skb_queue_len(_local->tx_wait_q));
>
> This will probably happen under heavy traffic. No need to print errors,
> it's normal to back pressure.
>

Removed.

>> +netif_stop_queue(ndev);
>> +}
>> +
>> +set_bit(EVENT_TX, _local->flags);
>> +schedule_work(_local->ax_work);
>> +
>> +return NETDEV_TX_OK;
>> +}
>> +
>> +static void
>> +ax88796c_skb_return(struct ax88796c_device *ax_local, struct sk_buff *skb,
>> +struct rx_header *rxhdr)
>> +{
>> +struct net_device *ndev = ax_local->ndev;
>> +int status;
>> +
>> +do {
>> +if (!(ndev->features & NETIF_F_RXCSUM))
>> +break;
>> +
>> +/* checksum error bit is set */
>> +if ((rxhdr->flags & RX_HDR3_L3_ERR) ||
>> +(rxhdr->flags & RX_HDR3_L4_ERR))
>> +break;
>> +
>> +/* Other types may be indicated by more than one bit. */
>> +if ((rxhdr->flags & RX_HDR3_L4_TYPE_TCP) ||
>> +(rxhdr->flags & RX_HDR3_L4_TYPE_UDP))
>> +skb->ip_summed = CHECKSUM_UNNECESSARY;
>> +} while (0);
>> +
>> +ax_local->stats.rx_packets++;
>> +ax_local->stats.rx_bytes += skb->len;
>> +skb->dev = ndev;
>> +
>> +skb->truesize = skb->len + sizeof(struct sk_buff);
>> +skb->protocol = eth_type_trans(skb, ax_local->ndev);
>> +
>> +netif_info(ax_local, rx_status, ndev, "< rx, len %zu, type 0x%x\n",
>> +   skb->len + sizeof(struct ethhdr), skb->protocol);
>> +
>> +status = netif_rx(skb);
>
> If I'm reading things right this is in process context, so netif_rx_ni()
>

Is it? The stack looks as follows

ax88796c_skb_return()
ax88796c_rx_fixup()
ax88796c_receive()
ax88796c_process_isr()
ax88796c_work()

and ax88796c_work() is a scheduled in the system_wq.

>> +if (status != NET_RX_SUCCESS)
>> +netif_info(ax_local, rx_err, ndev,
>> +   "netif_rx status %d\n", status);
>
> Again, it's inadvisable to put per packet prints without any rate
> limiting in the data path.

Even if limmited by the msglvl flag, which is off by default?

-- 
Łukasz Stelmach
Samsung R Institute Poland
Samsung Electronics


signature.asc
Description: PGP signature


Re: [PATCH v7 3/3] net: ax88796c: ASIX AX88796C SPI Ethernet Adapter Driver

2020-11-25 Thread Jakub Kicinski
On Tue, 24 Nov 2020 13:03:30 +0100 Łukasz Stelmach wrote:
> ASIX AX88796[1] is a versatile ethernet adapter chip, that can be
> connected to a CPU with a 8/16-bit bus or with an SPI. This driver
> supports SPI connection.
> 
> The driver has been ported from the vendor kernel for ARTIK5[2]
> boards. Several changes were made to adapt it to the current kernel
> which include:
> 
> + updated DT configuration,
> + clock configuration moved to DT,
> + new timer, ethtool and gpio APIs,
> + dev_* instead of pr_* and custom printk() wrappers,
> + removed awkward vendor power managemtn.
> + introduced ethtool tunable to control SPI compression
> 
> [1] 
> https://www.asix.com.tw/products.php?op=pItemdetail=104;65;86=65
> [2] 
> https://git.tizen.org/cgit/profile/common/platform/kernel/linux-3.10-artik/
> 
> The other ax88796 driver is for NE2000 compatible AX88796L chip. These
> chips are not compatible. Hence, two separate drivers are required.
> 
> Signed-off-by: Łukasz Stelmach 

drivers/net/ethernet/asix/ax88796c_main.c: In function ‘ax88796c_probe’:
drivers/net/ethernet/asix/ax88796c_main.c:966:32: warning: conversion from 
‘long unsigned int’ to ‘u32’ {aka ‘unsigned int’} changes value from 
‘18446744073709486079’ to ‘4294901759’ [-Woverflow]
  966 |  ax_local->mdiobus->phy_mask = ~BIT(AX88796C_PHY_ID);
  |^


Re: [PATCH v7 3/3] net: ax88796c: ASIX AX88796C SPI Ethernet Adapter Driver

2020-11-25 Thread Jakub Kicinski
On Tue, 24 Nov 2020 13:03:30 +0100 Łukasz Stelmach wrote:
> +static int
> +ax88796c_start_xmit(struct sk_buff *skb, struct net_device *ndev)
> +{
> + struct ax88796c_device *ax_local = to_ax88796c_device(ndev);
> +
> + skb_queue_tail(_local->tx_wait_q, skb);
> + if (skb_queue_len(_local->tx_wait_q) > TX_QUEUE_HIGH_WATER) {
> + netif_err(ax_local, tx_queued, ndev,
> +   "Too many TX packets in queue %d\n",
> +   skb_queue_len(_local->tx_wait_q));

This will probably happen under heavy traffic. No need to print errors,
it's normal to back pressure.

> + netif_stop_queue(ndev);
> + }
> +
> + set_bit(EVENT_TX, _local->flags);
> + schedule_work(_local->ax_work);
> +
> + return NETDEV_TX_OK;
> +}
> +
> +static void
> +ax88796c_skb_return(struct ax88796c_device *ax_local, struct sk_buff *skb,
> + struct rx_header *rxhdr)
> +{
> + struct net_device *ndev = ax_local->ndev;
> + int status;
> +
> + do {
> + if (!(ndev->features & NETIF_F_RXCSUM))
> + break;
> +
> + /* checksum error bit is set */
> + if ((rxhdr->flags & RX_HDR3_L3_ERR) ||
> + (rxhdr->flags & RX_HDR3_L4_ERR))
> + break;
> +
> + /* Other types may be indicated by more than one bit. */
> + if ((rxhdr->flags & RX_HDR3_L4_TYPE_TCP) ||
> + (rxhdr->flags & RX_HDR3_L4_TYPE_UDP))
> + skb->ip_summed = CHECKSUM_UNNECESSARY;
> + } while (0);
> +
> + ax_local->stats.rx_packets++;
> + ax_local->stats.rx_bytes += skb->len;
> + skb->dev = ndev;
> +
> + skb->truesize = skb->len + sizeof(struct sk_buff);
> + skb->protocol = eth_type_trans(skb, ax_local->ndev);
> +
> + netif_info(ax_local, rx_status, ndev, "< rx, len %zu, type 0x%x\n",
> +skb->len + sizeof(struct ethhdr), skb->protocol);
> +
> + status = netif_rx(skb);

If I'm reading things right this is in process context, so netif_rx_ni()

> + if (status != NET_RX_SUCCESS)
> + netif_info(ax_local, rx_err, ndev,
> +"netif_rx status %d\n", status);

Again, it's inadvisable to put per packet prints without any rate
limiting in the data path.


Re: [PATCH v7 3/3] net: ax88796c: ASIX AX88796C SPI Ethernet Adapter Driver

2020-11-24 Thread Andrew Lunn
On Tue, Nov 24, 2020 at 01:03:30PM +0100, Łukasz Stelmach wrote:
> ASIX AX88796[1] is a versatile ethernet adapter chip, that can be
> connected to a CPU with a 8/16-bit bus or with an SPI. This driver
> supports SPI connection.
> 
> The driver has been ported from the vendor kernel for ARTIK5[2]
> boards. Several changes were made to adapt it to the current kernel
> which include:
> 
> + updated DT configuration,
> + clock configuration moved to DT,
> + new timer, ethtool and gpio APIs,
> + dev_* instead of pr_* and custom printk() wrappers,
> + removed awkward vendor power managemtn.
> + introduced ethtool tunable to control SPI compression
> 
> [1] 
> https://www.asix.com.tw/products.php?op=pItemdetail=104;65;86=65
> [2] 
> https://git.tizen.org/cgit/profile/common/platform/kernel/linux-3.10-artik/
> 
> The other ax88796 driver is for NE2000 compatible AX88796L chip. These
> chips are not compatible. Hence, two separate drivers are required.
> 
> Signed-off-by: Łukasz Stelmach 

Reviewed-by: Andrew Lunn 

Andrew


Re: [PATCH v7 3/3] net: ax88796c: ASIX AX88796C SPI Ethernet Adapter Driver

2020-11-24 Thread Lukasz Stelmach
It was <2020-11-24 wto 13:17>, when Krzysztof Kozlowski wrote:
> On Tue, Nov 24, 2020 at 01:03:30PM +0100, Łukasz Stelmach wrote:
>> ASIX AX88796[1] is a versatile ethernet adapter chip, that can be
>> connected to a CPU with a 8/16-bit bus or with an SPI. This driver
>> supports SPI connection.
>> 
>> The driver has been ported from the vendor kernel for ARTIK5[2]
>> boards. Several changes were made to adapt it to the current kernel
>> which include:
>> 
>> + updated DT configuration,
>> + clock configuration moved to DT,
>> + new timer, ethtool and gpio APIs,
>> + dev_* instead of pr_* and custom printk() wrappers,
>> + removed awkward vendor power managemtn.
>> + introduced ethtool tunable to control SPI compression
>> 
>> [1]
>> https://protect2.fireeye.com/v1/url?k=400e2614-1f951ecd-400fad5b-0cc47a3356b2-10d6caf77ede1dd5=1=8ef355b1-1777-4137-878d-2b11d6ef0003=https%3A%2F%2Fwww.asix.com.tw%2Fproducts.php%3Fop%3DpItemdetail%26PItemID%3D104%3B65%3B86%26PLine%3D65
>> [2]
>> https://protect2.fireeye.com/v1/url?k=519692a9-0e0daa70-519719e6-0cc47a3356b2-b5daaace05887741=1=8ef355b1-1777-4137-878d-2b11d6ef0003=https%3A%2F%2Fgit.tizen.org%2Fcgit%2Fprofile%2Fcommon%2Fplatform%2Fkernel%2Flinux-3.10-artik%2F
>> 
>> The other ax88796 driver is for NE2000 compatible AX88796L chip. These
>> chips are not compatible. Hence, two separate drivers are required.
>> 
>> Signed-off-by: Łukasz Stelmach 
>> ---
>>  MAINTAINERS|6 +
>>  drivers/net/ethernet/Kconfig   |1 +
>>  drivers/net/ethernet/Makefile  |1 +
>>  drivers/net/ethernet/asix/Kconfig  |   35 +
>>  drivers/net/ethernet/asix/Makefile |6 +
>>  drivers/net/ethernet/asix/ax88796c_ioctl.c |  221 
>>  drivers/net/ethernet/asix/ax88796c_ioctl.h |   26 +
>>  drivers/net/ethernet/asix/ax88796c_main.c  | 1132 
>>  drivers/net/ethernet/asix/ax88796c_main.h  |  561 ++
>>  drivers/net/ethernet/asix/ax88796c_spi.c   |  112 ++
>>  drivers/net/ethernet/asix/ax88796c_spi.h   |   69 ++
>>  include/uapi/linux/ethtool.h   |1 +
>>  net/ethtool/common.c   |1 +
>>  13 files changed, 2172 insertions(+)
>>  create mode 100644 drivers/net/ethernet/asix/Kconfig
>>  create mode 100644 drivers/net/ethernet/asix/Makefile
>>  create mode 100644 drivers/net/ethernet/asix/ax88796c_ioctl.c
>>  create mode 100644 drivers/net/ethernet/asix/ax88796c_ioctl.h
>>  create mode 100644 drivers/net/ethernet/asix/ax88796c_main.c
>>  create mode 100644 drivers/net/ethernet/asix/ax88796c_main.h
>>  create mode 100644 drivers/net/ethernet/asix/ax88796c_spi.c
>>  create mode 100644 drivers/net/ethernet/asix/ax88796c_spi.h
>> 
>> diff --git a/MAINTAINERS b/MAINTAINERS
>> index 14b8ec0bb58b..930dc859d4f7 100644
>> --- a/MAINTAINERS
>> +++ b/MAINTAINERS
>> @@ -2812,6 +2812,12 @@ S:Maintained
>>  F:  Documentation/hwmon/asc7621.rst
>>  F:  drivers/hwmon/asc7621.c
>>  
>> +ASIX AX88796C SPI ETHERNET ADAPTER
>> +M:  Łukasz Stelmach 
>> +S:  Maintained
>> +F:  Documentation/devicetree/bindings/net/asix,ax99706c-spi.yaml
>
> Wrong file name.

Fixed. Thanks.
-- 
Łukasz Stelmach
Samsung R Institute Poland
Samsung Electronics


signature.asc
Description: PGP signature


Re: [PATCH v7 3/3] net: ax88796c: ASIX AX88796C SPI Ethernet Adapter Driver

2020-11-24 Thread Krzysztof Kozlowski
On Tue, Nov 24, 2020 at 01:03:30PM +0100, Łukasz Stelmach wrote:
> ASIX AX88796[1] is a versatile ethernet adapter chip, that can be
> connected to a CPU with a 8/16-bit bus or with an SPI. This driver
> supports SPI connection.
> 
> The driver has been ported from the vendor kernel for ARTIK5[2]
> boards. Several changes were made to adapt it to the current kernel
> which include:
> 
> + updated DT configuration,
> + clock configuration moved to DT,
> + new timer, ethtool and gpio APIs,
> + dev_* instead of pr_* and custom printk() wrappers,
> + removed awkward vendor power managemtn.
> + introduced ethtool tunable to control SPI compression
> 
> [1] 
> https://www.asix.com.tw/products.php?op=pItemdetail=104;65;86=65
> [2] 
> https://git.tizen.org/cgit/profile/common/platform/kernel/linux-3.10-artik/
> 
> The other ax88796 driver is for NE2000 compatible AX88796L chip. These
> chips are not compatible. Hence, two separate drivers are required.
> 
> Signed-off-by: Łukasz Stelmach 
> ---
>  MAINTAINERS|6 +
>  drivers/net/ethernet/Kconfig   |1 +
>  drivers/net/ethernet/Makefile  |1 +
>  drivers/net/ethernet/asix/Kconfig  |   35 +
>  drivers/net/ethernet/asix/Makefile |6 +
>  drivers/net/ethernet/asix/ax88796c_ioctl.c |  221 
>  drivers/net/ethernet/asix/ax88796c_ioctl.h |   26 +
>  drivers/net/ethernet/asix/ax88796c_main.c  | 1132 
>  drivers/net/ethernet/asix/ax88796c_main.h  |  561 ++
>  drivers/net/ethernet/asix/ax88796c_spi.c   |  112 ++
>  drivers/net/ethernet/asix/ax88796c_spi.h   |   69 ++
>  include/uapi/linux/ethtool.h   |1 +
>  net/ethtool/common.c   |1 +
>  13 files changed, 2172 insertions(+)
>  create mode 100644 drivers/net/ethernet/asix/Kconfig
>  create mode 100644 drivers/net/ethernet/asix/Makefile
>  create mode 100644 drivers/net/ethernet/asix/ax88796c_ioctl.c
>  create mode 100644 drivers/net/ethernet/asix/ax88796c_ioctl.h
>  create mode 100644 drivers/net/ethernet/asix/ax88796c_main.c
>  create mode 100644 drivers/net/ethernet/asix/ax88796c_main.h
>  create mode 100644 drivers/net/ethernet/asix/ax88796c_spi.c
>  create mode 100644 drivers/net/ethernet/asix/ax88796c_spi.h
> 
> diff --git a/MAINTAINERS b/MAINTAINERS
> index 14b8ec0bb58b..930dc859d4f7 100644
> --- a/MAINTAINERS
> +++ b/MAINTAINERS
> @@ -2812,6 +2812,12 @@ S: Maintained
>  F:   Documentation/hwmon/asc7621.rst
>  F:   drivers/hwmon/asc7621.c
>  
> +ASIX AX88796C SPI ETHERNET ADAPTER
> +M:   Łukasz Stelmach 
> +S:   Maintained
> +F:   Documentation/devicetree/bindings/net/asix,ax99706c-spi.yaml

Wrong file name.

Best regards,
Krzysztof


> +F:   drivers/net/ethernet/asix/ax88796c_*
> +