On Thu, Dec 08, 2005 at 03:34:15PM +0300, Ruslan V. Sushko wrote:
> This patch adds netpoll controller support for PPC EMAC driver
> 
> Signed-off-by: Ruslan V. Sushko <rsushko at ru.mvista.com>

Patches in-line are easier to review... :-)

> @@ -1071,8 +1071,16 @@ static int emac_start_xmit(struct sk_buf
>       struct ocp_enet_private *dev = ndev->priv;
>       unsigned int len = skb->len;
>       int slot;
> +     u16 ctrl;
>  
> -     u16 ctrl = EMAC_TX_CTRL_GFCS | EMAC_TX_CTRL_GP | MAL_TX_CTRL_READY |
> +#ifdef CONFIG_NET_POLL_CONTROLLER
> +     if (unlikely(dev->tx_cnt == NUM_TX_BUFF)) {
> +             netif_stop_queue(ndev);
> +             return -EBUSY;
> +     }
> +#endif

Why is this necessary?

> +
> +     ctrl = EMAC_TX_CTRL_GFCS | EMAC_TX_CTRL_GP | MAL_TX_CTRL_READY |
>           MAL_TX_CTRL_LAST | emac_tx_csum(dev, skb);
>  
>       slot = dev->tx_slot++;
> @@ -1938,6 +1946,33 @@ static int emac_ioctl(struct net_device 
>               return -EOPNOTSUPP;
>       }
>  }
> +#ifdef CONFIG_NET_POLL_CONTROLLER
> +void
> +poll_ctrl(struct net_device *dev)
> +{
> +     int budget = 16;
> +     struct ibm_ocp_mal *mal = ((struct ocp_enet_private*)(dev->priv))->mal;
> +     struct net_device *poll_dev = &(mal->poll_dev);
> +
> +     /* disable  MAL interrupts */
> +     mal_disable_eob_irq(mal);
> +     netif_poll_disable(poll_dev);

Is the call to netif_poll_disable necessary?  Aren't NAPI and netpoll
aware of each other?

> +
> +     emac_poll_rx(dev->priv, budget);
> +     emac_poll_tx(dev->priv);
> +
> +     netif_poll_enable(poll_dev);
> +     /* Enable mal interrupts */
> +     mal_enable_eob_irq(mal);
> +}
> +
> +int
> +poll_fake(struct net_device *dev, int *budget)
> +{
> +     /* It will be never invoked */
> +     return 0;
> +}
> +#endif

If it's never invoked, then why define it?

>  
>  static int __init emac_probe(struct ocp_device *ocpdev)
>  {
> @@ -2188,6 +2223,11 @@ static int __init emac_probe(struct ocp_
>       netif_carrier_off(ndev);
>       netif_stop_queue(ndev);
>  
> +#ifdef CONFIG_NET_POLL_CONTROLLER
> +     ndev->poll_controller = poll_ctrl;
> +     ndev->poll = poll_fake;
> +#endif
> +

->poll is not related to ->poll_controller.  It is for NAPI, not
netpoll.

I'll defer to others to comment on the IBM EMAC manipulation code.
It looked reasonable to me at first glance.

John
-- 
John W. Linville
linville at tuxdriver.com

Reply via email to