From: Wolfgang Grandegger <wg@grandegger.com>
To: Jonathan Corbet <corbet@lwn.net>
Cc: netdev@vger.kernel.org, linux-kernel@vger.kernel.org,
Oliver Hartkopp <oliver.hartkopp@volkswagen.de>
Subject: Re: [PATCH v2 3/7] [PATCH 3/8] can: CAN Network device driver and Netlink interface
Date: Thu, 14 May 2009 09:55:52 +0200 [thread overview]
Message-ID: <4A0BCE88.6020801@grandegger.com> (raw)
In-Reply-To: <20090513153112.0822809b@bike.lwn.net>
Jonathan Corbet wrote:
> [Quick review ...]
>
>> +/*
>> + * CAN device restart for bus-off recovery
>> + */
>> +int can_restart_now(struct net_device *dev)
>> +{
>> + struct can_priv *priv = netdev_priv(dev);
>> + struct net_device_stats *stats = &dev->stats;
>> + struct sk_buff *skb;
>> + struct can_frame *cf;
>> + int err;
>> +
>> + /* Synchronize with dev->hard_start_xmit() */
>> + netif_tx_lock(dev);
>> +
>> + /* Ensure that no more messages can go out */
>> + if (netif_carrier_ok(dev))
>> + netif_carrier_off(dev);
>> +
>> + /* Ensure that no more messages can come in */
>> + err = priv->do_set_mode(dev, CAN_MODE_STOP);
>> + if (err)
>> + return err;
>
> This leaves _xmit_lock held and carrier off. Is that really what you want
> to do?
>
>> +
>> + /* Now it's save to clean up */
>> + del_timer_sync(&priv->restart_timer);
>> + can_flush_echo_skb(dev);
>> +
>> + dev_dbg(dev->dev.parent, "restarted\n");
>> + priv->can_stats.restarts++;
>> +
>> + /* send restart message upstream */
>> + skb = dev_alloc_skb(sizeof(struct can_frame));
>> + if (skb == NULL)
>> + return -ENOMEM;
>
> ...here too...
>
>> + skb->dev = dev;
>> + skb->protocol = htons(ETH_P_CAN);
>> + cf = (struct can_frame *)skb_put(skb, sizeof(struct can_frame));
>> + memset(cf, 0, sizeof(struct can_frame));
>> + cf->can_id = CAN_ERR_FLAG | CAN_ERR_RESTARTED;
>> + cf->can_dlc = CAN_ERR_DLC;
>> +
>> + netif_rx(skb);
>> +
>> + dev->last_rx = jiffies;
>> + stats->rx_packets++;
>> + stats->rx_bytes += cf->can_dlc;
>> +
>> + /* Now restart the device */
>> + err = priv->do_set_mode(dev, CAN_MODE_START);
>> + if (err)
>> + return err;
>
> ...and here too. Do you maybe want to get rid of the middle-of-function
> returns and switch to the "goto out" convention?
Right, needs to be fixed.
>> + netif_carrier_on(dev);
>> +
>> + netif_tx_unlock(dev);
>> +
>> + return 0;
>> +}
>> +
>> +static void can_restart_after(unsigned long data)
>> +{
>> + struct net_device *dev = (struct net_device *)data;
>> +
>> + can_restart_now(dev);
>> +}
>
> can_restart_after what? I find myself confused by this function and
> wondering why it exists.
It's just a wrapper to make the compile happy. It's the timer callback
function used here:
priv->restart_timer.function = can_restart_after;
in contrast to can_restart_now(), which can be called via netlink
interface as well. Would the name "can_restart_callback" be more
appropriate?
Wolfgang.
next prev parent reply other threads:[~2009-05-14 7:56 UTC|newest]
Thread overview: 35+ messages / expand[flat|nested] mbox.gz Atom feed top
2009-05-12 9:27 [PATCH v2 0/7] can: CAN network device driver interface and drivers Wolfgang Grandegger
2009-05-12 9:27 ` [PATCH v2 1/7] [PATCH 1/8] can: Documentation for the CAN device driver interface Wolfgang Grandegger
2009-05-12 9:27 ` [PATCH v2 2/7] [PATCH 2/8] can: Update MAINTAINERS and CREDITS file Wolfgang Grandegger
2009-05-12 9:28 ` [PATCH v2 3/7] [PATCH 3/8] can: CAN Network device driver and Netlink interface Wolfgang Grandegger
2009-05-13 6:30 ` Andrew Morton
2009-05-13 6:53 ` Andrew Morton
2009-05-13 11:37 ` Wolfgang Grandegger
2009-05-13 15:57 ` Andrew Morton
2009-05-14 9:51 ` Wolfgang Grandegger
2009-05-13 10:02 ` Oliver Hartkopp
2009-05-13 11:39 ` Wolfgang Grandegger
2009-05-13 12:08 ` Oliver Hartkopp
2009-05-13 12:23 ` Wolfgang Grandegger
2009-05-15 7:15 ` Oliver Hartkopp
2009-05-15 7:46 ` Wolfgang Grandegger
2009-05-13 21:31 ` Jonathan Corbet
2009-05-14 7:55 ` Wolfgang Grandegger [this message]
2009-05-12 9:28 ` [PATCH v2 4/7] [PATCH 4/8] can: Driver for the SJA1000 CAN controller Wolfgang Grandegger
2009-05-13 21:52 ` Jonathan Corbet
2009-05-14 9:03 ` Wolfgang Grandegger
2009-05-15 20:39 ` Jonathan Corbet
2009-05-15 21:24 ` Wolfgang Grandegger
2009-05-16 6:57 ` Wolfgang Grandegger
2009-05-20 21:31 ` Jonathan Corbet
2009-05-12 9:28 ` [PATCH v2 5/7] [PATCH 5/8] can: SJA1000 generic platform bus driver Wolfgang Grandegger
2009-05-13 22:02 ` Jonathan Corbet
2009-05-15 9:33 ` Wolfgang Grandegger
2009-05-14 6:46 ` Sascha Hauer
2009-05-15 9:35 ` Wolfgang Grandegger
2009-05-15 12:07 ` Sascha Hauer
2009-05-15 13:12 ` Wolfgang Grandegger
2009-05-12 9:28 ` [PATCH v2 6/7] [PATCH 6/8] can: SJA1000 driver for EMS PCI cards Wolfgang Grandegger
2009-05-12 9:28 ` [PATCH v2 7/7] [PATCH 7/8] can: SJA1000 driver for Kvaser " Wolfgang Grandegger
2009-05-13 22:20 ` Jonathan Corbet
2009-05-15 8:54 ` Wolfgang Grandegger
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=4A0BCE88.6020801@grandegger.com \
--to=wg@grandegger.com \
--cc=corbet@lwn.net \
--cc=linux-kernel@vger.kernel.org \
--cc=netdev@vger.kernel.org \
--cc=oliver.hartkopp@volkswagen.de \
/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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox