From: Stefan Richter <stefanr@s5r6.in-berlin.de>
To: Ben Hutchings <bhutchings@solarflare.com>,
Maxim Levitsky <maximlevitsky@gmail.com>
Cc: netdev@vger.kernel.org, linux1394-devel@lists.sourceforge.net,
Peter Stuge <peter@stuge.se>
Subject: [PATCH update 2] firewire: net: add carrier detection
Date: Mon, 13 Dec 2010 01:46:02 +0100 [thread overview]
Message-ID: <20101213014602.6bc2727b@stein> (raw)
In-Reply-To: <1292195134.3136.296.camel@localhost>
From: Maxim Levitsky <maximlevitsky@gmail.com>
To make userland, e.g. NetworkManager work with firewire, we need to
detect whether cable is plugged or not. Simple and correct way of doing
that is just counting number of peers. No peers - no link and vice
versa.
(Stefan R.: Drop ethtool_ops.get_link)
Signed-off-by: Stefan Richter <stefanr@s5r6.in-berlin.de>
---
Update 2: Removed ethtool related hunks; dev->peer_count does not need
to be accessed within the spinlock as I first thought; reduced pointer
reference depth in fwnet_remove_peer.
Maxim, do you observe a remaining need for a get_link implementation?
I can't tell, I use rather minimal userland that doesn't care for link
status.
drivers/firewire/net.c | 16 ++++++++++++----
1 file changed, 12 insertions(+), 4 deletions(-)
Index: b/drivers/firewire/net.c
===================================================================
--- a/drivers/firewire/net.c
+++ b/drivers/firewire/net.c
@@ -179,6 +179,7 @@ struct fwnet_device {
/* Number of tx datagrams that have been queued but not yet acked */
int queued_datagrams;
+ int peer_count;
struct list_head peer_list;
struct fw_card *card;
struct net_device *netdev;
@@ -1465,6 +1466,10 @@ static int fwnet_add_peer(struct fwnet_d
list_add_tail(&peer->peer_link, &dev->peer_list);
spin_unlock_irq(&dev->lock);
+ /* dev->peer_count acess is serialized by fwnet_device_mutex. */
+ if (++dev->peer_count > 1)
+ netif_carrier_on(dev->netdev);
+
return 0;
}
@@ -1543,13 +1548,16 @@ static int fwnet_probe(struct device *_d
return ret;
}
-static void fwnet_remove_peer(struct fwnet_peer *peer)
+static void fwnet_remove_peer(struct fwnet_peer *peer, struct fwnet_device *dev)
{
struct fwnet_partial_datagram *pd, *pd_next;
- spin_lock_irq(&peer->dev->lock);
+ if (--dev->peer_count == 1)
+ netif_carrier_off(dev->netdev);
+
+ spin_lock_irq(&dev->lock);
list_del(&peer->peer_link);
- spin_unlock_irq(&peer->dev->lock);
+ spin_unlock_irq(&dev->lock);
list_for_each_entry_safe(pd, pd_next, &peer->pd_list, pd_link)
fwnet_pd_delete(pd);
@@ -1566,7 +1574,7 @@ static int fwnet_remove(struct device *_
mutex_lock(&fwnet_device_mutex);
- fwnet_remove_peer(peer);
+ fwnet_remove_peer(peer, dev);
if (list_empty(&dev->peer_list)) {
net = dev->netdev;
--
Stefan Richter
-=====-==-=- ==-- -==-=
http://arcgraph.de/sr/
------------------------------------------------------------------------------
Oracle to DB2 Conversion Guide: Learn learn about native support for PL/SQL,
new data types, scalar functions, improved concurrency, built-in packages,
OCI, SQL*Plus, data movement tools, best practices and more.
http://p.sf.net/sfu/oracle-sfdev2dev
next prev parent reply other threads:[~2010-12-13 0:46 UTC|newest]
Thread overview: 32+ messages / expand[flat|nested] mbox.gz Atom feed top
2010-11-29 2:09 [PATCH 0/5 V2] Firewire networking assorted fixes Maxim Levitsky
2010-11-29 2:09 ` [PATCH 1/5] firewire: ohci: restore GUID on resume Maxim Levitsky
2010-11-29 2:09 ` [PATCH 2/5] firewire: ohci: restart ISO DMA contexts on resume from low power mode Maxim Levitsky
2010-11-29 2:09 ` [PATCH 3/5] NET: IPV4: ARP: allow to invalidate specific ARP entries Maxim Levitsky
2010-12-04 23:15 ` Maxim Levitsky
2010-12-05 8:19 ` Eric Dumazet
2010-12-05 11:23 ` [PATCH] net: RCU conversion of dev_getbyhwaddr() and arp_ioctl() Eric Dumazet
2010-12-05 12:03 ` [PATCH net-2.6] llc: fix a device refcount imbalance Eric Dumazet
2010-12-08 17:59 ` David Miller
2010-12-09 3:46 ` Maxim Levitsky
2010-12-16 21:49 ` Maxim Levitsky
2010-12-08 18:05 ` [PATCH] net: RCU conversion of dev_getbyhwaddr() and arp_ioctl() David Miller
2010-12-08 18:07 ` Eric Dumazet
2010-12-08 18:10 ` David Miller
2010-12-08 18:11 ` Eric Dumazet
2011-01-07 12:47 ` [PATCH 3/5] NET: IPV4: ARP: allow to invalidate specific ARP entries Maxim Levitsky
2011-01-07 12:57 ` Eric Dumazet
2011-01-07 13:15 ` Maxim Levitsky
2011-01-08 23:57 ` Maxim Levitsky
2011-01-11 0:11 ` David Miller
2010-11-29 2:09 ` [PATCH 4/5] firewire: net: invalidate ARP entries of removed nodes Maxim Levitsky
2010-11-29 2:09 ` [PATCH 5/5] firewire: net: ratelimit error messages Maxim Levitsky
2010-11-29 15:02 ` [PATCH 0/5 V2] Firewire networking assorted fixes Stefan Richter
2010-12-04 23:14 ` Maxim Levitsky
2010-12-08 3:32 ` Maxim Levitsky
2010-12-09 1:42 ` Maxim Levitsky
[not found] ` <20101208040559.20639.qmail@stuge.se>
[not found] ` <1291809485.5421.0.camel@maxim-laptop>
2010-12-12 17:09 ` [PATCH update] firewire: net: add carrier detection Stefan Richter
2010-12-12 23:05 ` Ben Hutchings
2010-12-13 0:46 ` Stefan Richter [this message]
2010-12-13 23:01 ` [PATCH update 3] " Stefan Richter
2010-12-14 23:46 ` Maxim Levitsky
2010-12-16 1:17 ` Dan Williams
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=20101213014602.6bc2727b@stein \
--to=stefanr@s5r6.in-berlin.de \
--cc=bhutchings@solarflare.com \
--cc=linux1394-devel@lists.sourceforge.net \
--cc=maximlevitsky@gmail.com \
--cc=netdev@vger.kernel.org \
--cc=peter@stuge.se \
/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;
as well as URLs for NNTP newsgroup(s).