lkml.org 
[lkml]   [2012]   [Sep]   [10]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    Date
    From
    Subject[PATCH] can: export a safe netdev_priv wrapper for candev
    can: export a safe netdev_priv wrapper for candev

    In net_device notifier calls, it was impossible to determine
    if a CAN device is based on candev in a safe way.
    This patch adds such test in order to access candev storage
    from within those notifiers.

    Signed-off-by: Kurt Van Dijck <kurt.van.dijck@eia.be>

    diff --git a/drivers/net/can/dev.c b/drivers/net/can/dev.c
    index 963e2cc..6c1e704 100644
    --- a/drivers/net/can/dev.c
    +++ b/drivers/net/can/dev.c
    @@ -795,6 +795,18 @@ void unregister_candev(struct net_device *dev)
    }
    EXPORT_SYMBOL_GPL(unregister_candev);

    +/*
    + * Test if a network device is a candev based device
    + * and return the can_priv* if so.
    + */
    +struct can_priv *safe_candev_priv(struct net_device *dev)
    +{
    + if ((dev->type != ARPHRD_CAN) || (dev->rtnl_link_ops != &can_link_ops))
    + return NULL;
    +
    + return netdev_priv(dev);
    +}
    +
    static __init int can_dev_init(void)
    {
    int err;
    diff --git a/include/linux/can/dev.h b/include/linux/can/dev.h
    index 7747d9b..fb0ab65 100644
    --- a/include/linux/can/dev.h
    +++ b/include/linux/can/dev.h
    @@ -106,6 +106,9 @@ u8 can_len2dlc(u8 len);
    struct net_device *alloc_candev(int sizeof_priv, unsigned int echo_skb_max);
    void free_candev(struct net_device *dev);

    +/* a candev safe wrapper around netdev_priv */
    +struct can_priv *safe_candev_priv(struct net_device *dev);
    +
    int open_candev(struct net_device *dev);
    void close_candev(struct net_device *dev);


    \
     
     \ /
      Last update: 2012-09-10 17:01    [W:2.896 / U:0.184 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site