Thread (67 messages) 67 messages, 5 authors, 2012-09-12

Re: [PATCH] can: rename LED trigger name on netdev renames

From: Kurt Van Dijck <hidden>
Date: 2012-09-07 07:19:40
Also in: lkml

On Thu, Sep 06, 2012 at 10:46:00PM +0200, Fabio Baltieri wrote:
On Thu, Sep 06, 2012 at 09:31:07PM +0200, Oliver Hartkopp wrote:
quoted
quoted
quoted
+
+/*
+ * NETDEV rename notifier to rename the associated led triggers too
+ */
+static int can_led_notifier(struct notifier_block *nb, unsigned long msg,
+			void *data)
+{
+	struct net_device *netdev = (struct net_device *)data;
+	struct can_priv *priv = netdev_priv(netdev);
That's the main problem, which I also got stuck into when I did my first
can-led implementation.  As LED structures are in netdev's private data,
you can only use it if your driver is based on the can-dev API, and
there are no way to be sure of that if you get outside driver's code
itself.

This would give problems with vcan, slcan, and probabily other
non-mainlined drivers.

Do you think, this is really a problem?

If a driver decides not to use the can-dev framework it has to implement own
solutions or just adopt can-dev.
Agreed, but this still means that we can't assume that
netdev_priv(netdev) to a netdev where netdev->type == ARPHRD_CAN points
to a struct can_priv, right?
It remains a problem for vcan & slcan.
I tend to start looking at how netlink deals with it.
I see 2 options:
* Invent a new flag for netdev->features, like NETIF_F_CANDEV, to be assigned
  at http://lxr.free-electrons.com/source/drivers/net/can/dev.c#L464

* test for the rtnl_link_ops:
  We put a function can_priv_safe(netdev) in driver/net/can/dev.c that tests
  netdev->rtnl_link_ops == &can_link_ops, like in
  http://lxr.free-electrons.com/source/drivers/net/can/dev.c#L751
  and for candev based drivers, it returns a can_priv*, otherwise NULL.
  I'll prepare something early next week ...

Kind regards,
Kurt
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help